回答
可選的要點是做出流暢的API。現場不是,也不應該是 API的一部分。
你在Optional<Object> obj
和Object obj
之間的區別是什麼?
這兩個字段都可以註釋爲@NotNull
。 使用@NotNull
註釋字段將給出與註釋Optional
相同的結果,但不會有任何額外的呼叫,如ifPresent()
。如果要使用Optional
將鏈接操作應用於字段 - 您以錯誤的方式使用Optional
。沒有理由在字段中使用Optional
。
您可以在openjdk郵件列表optional discussion中閱讀更多信息。
有可選能夠做流暢的API mail.openjdk
是的,你應該標記每Optional
變量作爲@NonNull
。
可選類型的變量不能爲空。 Stuart Marks的rules about use of Optional開始於:
- 永遠不會對可選變量或返回值使用null。
如果您編寫@NonNull
,那麼您將獲得工具幫助以確保您不違反此重要規則。
如果您不寫@NonNull
,那麼您只有自己的個人紀律,以防止您犯錯,而且客戶也可能犯錯。
因此,您應該編寫@NonNull
,它用作機器可讀和機器檢查的文檔,該變量不應該爲空。
這不僅適用於字段(成員變量),也適用於您使用Optional
的任何地方。
但是也請閱讀規則6:避免在字段,方法參數和集合中使用Optional。 –
是的,還讀了其他規則。但是,它們與原始問題無關。如果你有一個可選類型的字段,它應該是'@ NonNull'。 – mernst
- 1. 爲什麼我不能將可選的paremeter默認爲成員變量?
- 2. $。推薦爲成員變量
- 3. 成員變量的臨時可變性
- 4. 將PHP變量輸入爲HTML選擇標記
- 5. 默認情況下如何指示成員字段爲@Nonnull?
- 6. 成員變量不是一個選項
- 7. gdb何時將變量標記爲「不可用」?
- 8. PhpStorm將現有變量標記爲「未解決變量」
- 9. 將類成員變量初始化/分配給其他類成員變量
- 10. CodeFirstMembership - 實體成員標記爲虛擬。
- 11. 如何用可變成員變量創建不可變類?
- 12. 對象作爲成員變量
- 13. 成員變量爲空,虛假?
- 14. 爲什麼使用成員變量?
- 15. 變量是一樣的成員變量
- 16. 將指針派生類成員變量轉換爲指向基類成員變量的指針是否合法?
- 17. 選擇所有成員變量條件爲真的bean
- 18. 在記錄之後將變量強制標記爲數字
- 19. 可爲空的變量類型 - .value成員
- 20. 是否可以將成員變量作爲參數傳遞給C++中的成員函數?
- 21. 複製timeval成員變量爲整數變量
- 22. 成員變量繼承
- 23. 使用成員變量
- 24. fstream類成員變量
- 25. 綁定到成員變量
- 26. 任意成員變量
- 27. 基於成員變量
- 28. 抽象的成員變量
- 29. 約ThreadPoolExecutor的成員變量
- 30. 覆蓋類成員變量
如果使用'@ NonNull'對其進行註釋,則即使您不需要它,您也必須始終對其進行初始化。我認爲關於內存使用情況並不算太壞。同樣的任何數據類型我會認爲 – XtremeBaumer
沒有得到這部分 - 「我會認爲它不是太糟糕的內存使用情況」。我在想,如果我使NonNull有助於避免空檢查,但是通過該邏輯去除所有字段(除了原語)都應該標記爲NonNull。還標有NonNull並不意味着它必須每次都被初始化......因爲我可以給出默認值..對嗎?所以我不必通過建設者 – Andy897
明確地初始化它,請告訴我們你使用了哪個@NonNull。如果它的龍目自己的,那麼你有另一個默認值的註釋。關於你不明白的一點:如果你初始化一個變量,你不需要你的對象的大小會增加(一些位/字節)。這將意味着你會浪費內存和更多的對象,你會浪費更多的內存 – XtremeBaumer