Ne'In Guava noktası'in İsteğe bağlı sınıf
Son zamanlarda bu konuda okumak ve insanların bu sınıf, ama hemen hemen tüm durumlarda, null
kullanmaya çalıştı olurdu - eğer daha sezgisel kullanarak gördüm. Biri Optional
null
yapamadığın şeyleri ya da daha temiz bir şekilde elde etmek istiyorsunuz somut bir örnek verebilir? Tek şey belki onu kullanmak için Maps
bunu kabul etmiyoruz null
anahtarlar, ama bu yapılabilir bir yan "eşleme" null değeri. Herkes daha fazla ikna edici bir argüman bana verebilir mi? Teşekkür ederim.
CEVAP
Guava ekip üyesi burada.
Muhtemelen tek ve en büyük dezavantajı null
herhangi bir bağlamda ifade etmeli ne kadar belli değil: açıklayıcı bir adı yok. Değil her zaman açık olduğunu null
anlamı "hiçbir değeri bu parametre" -- yahu, dönüş değeri, bazen demek "hata", ya da "başarı" (!!), ya da sadece "doğru cevap " hiçbir şey". Optional
sık değişken null yaptığınızda aslında ama her zaman değil kavramdır. Değil, kendi sınıf etmeniz önerilir, Optional
benzer ama farklı bir adlandırma düzeni ile değil, gerçekten demek istediğin açık.
Ama Optional
en büyük avantajı okunabilirlik değil derdim: avantajı aptal geçirmez-lik. Aktif olarak aktif Optional
açmak zorunda olduğundan, eğer tüm programı derlemek isterseniz devamsızlık dava hakkında düşünüyorum, ve bu durumda adres için zorlar. Null rahatsız edici derecede kolay basit şeyleri unutmak için yapar, ve FindBugs yardımcı olur ama, sorun yaklaşık olarak adresleri sanmıyorum. Bu olabilir ya da "hediye." olmayabilir değerleri döndüren olduğunda özellikle geçerlidir Siz (ve diğerleri) çok daha büyük olasılıkla unutmayın other.method(a, b)
diye dönüş null
değeri daha iyisin muhtemel unutmayın a
olabilir null
when you're uygulama other.method
. Optional
dönen nesnenin kendileri çözmek zorundalar beri arayanlar bu durumda unutmak imkansız hale getirir.
Bu nedenlerden dolayı, mutlaka yöntem bağımsız değişkenleri yöntemlerinizi, ama bir dönüş türü olarak Optional
kullanmanızı öneririz.
(Bu tamamen cribbed, yol, tartışma here.)
Nasıl isteğe bağlı yöntemler ile bir p...
C# 4.0: varsayılan değeri isteğe bağlı...
HTML: Vardır, ya da, isteğe bağlı kapa...
isteğe bağlı yerel değişkenler kısmi ş...
Ondalık ondalık isteğe bağlı sonra, bu...