2016-01-20 31 views
8

Yani bazı okuma sonraJava İsteğe bağlı - Else Tablolar Eğer

if (optional.isPresent()) { 
    //do smth 
} 

İsteğe bağlı (http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html) kullanmak için tercih edilen yol olmadığını gördük. Böyle bir if ifadesi varsa Ama:

if (optional.isPresent()) { 
    car = getCar(optional.get()); 
} else { 
    car = new Car(); 
    car.setName(carName); 
} 

bu Bunu yapmanın en iyi yolu mu yoksa daha önerilen yol var? Eğer Car yapıcı içine adını dahil edebilirsiniz Eğer

+0

ben bile ifadeleri ise, bu tür bütün mesele meydan okuyan ihtiyaç şüpheliyim. – Stultuske

+0

@assylias Bu nasıl çalışır? İsteğe bağlı dönüş bir araba nesnesi değil, bir kimlik olur mu? – uraza

+0

Aslında bazı yöntemleri döndürülür değerinin bir Oid'in olabilir ve o ekstra dikkate almak gerektiğini geliştirici belirtmek tanıtıldı sarıcı. – Antoniossss

cevap

16

aşağıdaki şekilde Optional kullanabilirsiniz. if-else ifadesiyle yazma

Car car = optional.map(id -> getCar(id)) 
      .orElseGet(() -> { 
       Car c = new Car(); 
       c.setName(carName); 
       return c; 
      }); 

zorunlu tarzıdır ve değişken carif-else bloktan önce ilan gerektirir. Optional yılında map kullanma

daha işlevsel tarzıdır. Ve bu yaklaşım önceden değişken bildirime ihtiyaç duymaz ve Optional'un kullanılması önerilir.

+4

Bu gerçekten işe yarıyor gibi görünüyor. Bununla birlikte, bu kodun okunabilir hale getirilip getirilmediğini veya bu şekilde yazmanın bir avantajı olup olmadığını merak ediyorum. – uraza

+0

Bu şekilde yazılırsa, 'Araba otomobili' değişkeni bildirme zorunluluğu ortadan kaldırılır. – TheKojuEffect

+0

@uraza if-else zorunlu bir stil kullanmak ve bu yaklaşımı kullanmak işlevsel bir stildir. Okunabilirlik bu şekilde arttırılır. – TheKojuEffect

3

, o zaman bu yazabilirsiniz:

car = optional.map(id -> getCar(id)) 
       .orElseGet(() -> new Car(carName)); 

yapıcınızdan ayrı ayarlayıcı çağırmak gerekiyorsa, böyle bir şey ile sona ereceğini:

car = optional.map(id -> getCar(id)) 
       .orElseGet(() -> { 
        Car c = new Car(); 
        c.setName(carName); 
        return c; 
       }); 
+1

İsteğe bağlı boş değilse, orElseGet bir Car nesnesini gerçekten döndürüyor mu? – uraza

+0

Eğer 'Car'' arabName' parametresi ile bir kurucuya sahipse, 'car = optional.orElse (yeni Araba (carName));' kullanılabilir. – TheKojuEffect

+0

gibi görünüyor, 'Op' 'İsteğe bağlı 'yerine' araba 'almak için' getCar' yöntemini kullanıyor. – TheKojuEffect