2015-04-18 21 views
5

döndürmenin gerçek yararı, kodum Map<String, String> emin olursa, ancak boş olabilir. Optional<Map<String, String>> dönmek için dönüştürmenin bir yararı var mı. Boş ama boş olmayan örneklere herhangi bir faydası olur mu?İsteğe bağlı <Map <String, String >> yerine boş bir Map <String, String>

+3

Son zamanlarda bir iş arkadaşınızla bunun hakkında bir tartışma yaptım. Bence bir fikrin varlığına inanıyorum, bence Java'nın 'İsteğe bağlı 'bir monad olarak ne kadar güçlü olduğuna inanıyorsunuz. Pragmatik olarak boş haritayı tercih ederim. –

+1

Huh, kişisel olarak "İsteğe bağlı >" değerini görmek için basılmalıyım. Ama belki ikna olabilirim. – yshavit

+4

Brian Goetz'e göre, onu (ve Haritalar) da kullanmamalısınız. Bakınız: http://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555 – alfasin

cevap

9

Bilgisayar programcılığında pek çok konu gibi, Bağımlıdır (tm).

İsteğe bağlı kullanmama yolu null (özetle) seçeneğidir. onun advantages biri döndürülen değeri olmayabilir dikkate almak arayan zorlar ve bu geçerli bir durumdur bu ... Yukarıda bağlantılı yanıtlarından tırnak düşünün: a

yokluğunda API üzerinde dövülmüş olacak değeriboş

ve

için kod ya da tüketicinin herhangi bir okuyucu daha hassas bir formülasyondur kafa orada hiçbir şey olmadığı gerçeğine ve değere erişmeden önce bir çek gerekli olduğunu. Ben döndürme türü imzasını Optional<Map<String, String>> görünce

Yani, boş Map geçerli bir dönüş değeri olabilecek bir işlevinden bir dönüş türü olarak düşünmek, ancak bunu bir Map bütün bir eksikliğidir. Bunun

Örnekler İlk durumda vs. getCachedFavoriteColors, findInvalidValuePairs içerir, boş bir Map dönecekti herhangi tüm kullanıcılar, olmayabilir - ama geçersiz Optional dönmek bir önbellek değeri olmayabilir . İkinci durumda, tekrar boş bir Map döndüren geçersiz değer çiftleri olmayabilir, ancak Invalidator da olmayabilir. Kaptın bu işi.

Yukarıdaki örneklerin bazılarında, geçersiz bir Optional yerine bir istisna atmak isteyebileceğinizi unutmayın. Bu bir API tasarımcısı olarak kararınız.

+1

Ancak bir Harita boş olabilir - bir Haritanın herhangi bir kullanıcısı bunu bilmelidir, yani Eşit derecede dövülmüş. Ben ek değeri göremiyorum. Aslında, henüz _another_ "bu boş" tür bir durum oluşturdunuz. Artık referansınız 'boş(), boş bir haritanın veya boş olmayan bir haritanın olabilir. Bu, ilk iki durum arasında bazı farklılıklar olduğunu gösteriyor ve muhtemelen bu farkın ne olduğu açık değil (API bağlamında bile). – yshavit

+7

Ancak (ve elbette bu fikrin API tasarımına mantıklı bir şekilde uygulanması gerekir): * Bir Haritadaki elemanların olmaması * Haritanın yokluğundan * farklıdır *. Opsiyonel, özlü bir şekilde ifade etmenize izin veren ikincisidir. – thirtythreeforty

+2

Hem boş hem de boş haritaları kontrol etmeyi hatırlamak zor, çoğu zaman insanlar unutacak ve sonuçta çalışma zamanı hataları atılacak. İsteğe bağlı olarak, boş ve boş ama başlatılmış yapıların kontrollerini tek bir kontrolde yoğunlaştırabilirsiniz.Onları için kullanıyorum ve kesinlikle çok daha kolay kontrol hata yapar. – egracer

İlgili konular