Guava ekip üyesi burada.
Muhtemelen en büyük dezavantajı, nullherhangi 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. Optionalgenellikle bir değişkeni null yapılabilir yaptığınızda kastettiğiniz kavramdır, ancak her zaman değil. OptionalDeğ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 Optionalokunabilirlikte 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 Optionalve 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 nullEğer unutmak olasıdır daha değer aolabilir nullsiz 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ı, Optionalyö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 .)