Guava ekip üyesi burada.
Muhtemelen en büyük dezavantajı, null
herhangi bir bağlamda ne anlama gelmesi gerektiğinin açık olmamasıdır: açıklayıcı bir adı yoktur. null
"Bu parametre için değer yok" anlamına geldiği her zaman açık değildir - heck, bir dönüş değeri olarak, bazen "hata" veya hatta "başarı" (!!) veya kısaca "doğru cevap hiçbir şeydir" anlamına gelir. Optional
genellikle bir değişkeni null yapılabilir yaptığınızda kastettiğiniz kavramdır, ancak her zaman değil. Optional
Değilse, gerçekte ne demek istediğinizi netleştirmek için kendi sınıfınızı benzer ancak farklı bir adlandırma şemasıyla yazmanızı öneririz.
Ama en büyük avantajının Optional
okunabilirlikte olmadığını söyleyebilirim : Avantaj, aptalca kanıtlanmamış olmasıdır. Programınızın derlenmesini istiyorsanız, mevcut olmayan durumu aktif olarak düşünmeye zorlar, çünkü bu durumu aktif olarak açmanız Optional
ve ele almanız gerekir . Null, bir şeyleri basitçe unutmayı rahatsız edici derecede kolaylaştırır ve FindBugs yardımcı olsa da, sorunu neredeyse aynı şekilde ele aldığını düşünmüyorum. Bu, özellikle "mevcut" olabilecek veya olmayabilecek değerler döndürürken önemlidir. Sen (ve diğerleri) unutmak çok daha muhtemeldir other.method(a, b)
bir geri dönebilirler null
Eğer unutmak olasıdır daha değer a
olabilir null
siz uygularken yaparken other.method
. Geri dönenOptional
Nesneyi kendilerinin açması gerektiğinden arayanların bu durumu unutmasını imkansız kılar.
Bu nedenlerden dolayı, Optional
yöntemleriniz için bir dönüş türü kullanmanızı öneririz, ancak yöntem bağımsız değişkenlerinizde olması gerekmez.
(Bu tamamen tartışmadan, bu arada, cribbed edilir burada .)