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>
cevap
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.
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
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
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
- 1. ArrayList <HashMap <String, String >> String []
- 2. ICollection <string> string []
- 3. Bir Tuple <string, string, Func <bool>>
- 4. <Func <T, string>>
- 5. JPA Haritası <String, String> eşleştirmesi
- 6. String ArrayList <String> Casting []
- 7. HashSet <String> String türüne dönüştürme []
- 8. Haritaya <Eşleme <String, Dize>
- 9. Set <String> Set []?
- 10. Neden bir sözlük oluşturamıyorum <string, dictionary <string, string >>?
- 11. Bir java @RequestBody Map <String, String> için örnek bir girişi nasıl el ile açıklayabilirim?
- 12. LINQ - Sözlük içine Listesini <string> çevirmek <string, string>
- 13. LinkedHashMap <string, LinkedHashMap <string, string >> nasıl görüntülenebilir
- 14. Dizeler dizisini <string>
- 15. dönüştürme Liste <String>
- 16. Sözlük <string, object>
- 17. SWIG, Python'da bir harita <string, string> nasıl sarılır?
- 18. ArrayList <ArrayList <String>> değerini (String) alın(); Java
- 19. Kullanım FlurryAgent.onEvent (Dize eventId, Harita <String, String> parametreleri)
- 20. LINQ sorgusu bir Sözlük döndürür <string, string>
- 21. ListItemCollection (dropdownlist.items) bir sözlüke <string, string> nasıl dönüştürülür?
- 22. Harita <String, Object> tip argümanları Harita <String, String []> i aşağıda gibi itiraz Dize dizisi iletebilir beri
- 23. ArrayList <ArrayList <String>> öğesini nasıl sıralayabilirim?
- 24. 'Async <string []>' türü 'seq <'a>'
- 25. Java sözlüğü <String, Liste <Object>>
- 26. Dönüştürme <Object> Koleksiyon <String>
- 27. List <String> ile <form:select> nasıl doldurulur?
- 28. Bir numarayı listelemeye dönüştürme <string>
- 29. Hashmap <String, List <Items>> 'nu,
- 30. Harita Oluştur <String, String> from POJO
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. –
Huh, kişisel olarak "İsteğe bağlı
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