1 回答

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為“依靠簡(jiǎn)單明了的代碼”的建議在任何地方都是很好的建議,不限于 eitherOptional
或Stream.ofNullable
.
就題中的具體選擇而言:我覺得很難說一個(gè)客觀上比另一個(gè)更簡(jiǎn)單直白。Stream.ofNullable
更簡(jiǎn)潔,但需要您知道它的作用;顯式檢查更冗長(zhǎng),但如果您不熟悉s,if
可能更容易理解。Stream
當(dāng)向 API 引入新方法時(shí),可以說它在某種意義上“更難”,因?yàn)椴皇煜?API 方法的人會(huì)發(fā)現(xiàn)它更難閱讀,因?yàn)樗麄儾恢涝摲椒ǖ淖饔?。?dāng)然,人們可以反駁說他們應(yīng)該知道,或者應(yīng)該預(yù)料到會(huì)遇到他們不知道的事情。
所以,我基本上是說你應(yīng)該使用你/你的代碼的讀者會(huì)覺得最舒服的那個(gè)。
但是,我認(rèn)為這里不好的做法是getHandlers(...)
首先返回 null 。Effective Java中有一項(xiàng)(第 3 版第 54 項(xiàng),第 2 版第 43 項(xiàng))關(guān)于總是返回一個(gè)空列表而不是 null。
此建議在這里非常有效,因?yàn)槟幚砜樟斜淼姆绞脚c處理空列表的方式相同。
這樣做可以讓你寫:
List<Handler> handlers = getHandlers(...); handlers.stream().forEach(...);
這是客觀上更簡(jiǎn)單的代碼。
我認(rèn)為使用它會(huì)更好:
for (Handler h : getHandlers(...)) { // ... }
因?yàn)槟梢愿`活地在循環(huán)內(nèi)做更多事情(例如中斷),而無(wú)需使用流(/類似流的方法)。
添加回答
舉報(bào)