簡體   English   中英

可選類中的toString()方法

[英]override toString() method in class Optional

我有一個實例變量定義為:

final Optional<myClass> myOptional; 

我想重寫其toString()方法,以便與其返回"[Optional(the value)]" ,不如直接返回"(the value)" (如果為空,則返回其他"(the value)" )。 但是我無法創建Optional的子類,因為它顯然是最終的。 我怎樣才能做到這一點?

GhostCat是正確的,因為您不能繼承 Optional子類並覆蓋其toString方法。 但是,您可以通過編寫以下代碼來獲得所需的效果:

String myString = myOptional.map(MyClass::toString).orElse("(empty)")

如果存在值,這會將myString設置為值的toString方法的結果,否則,如果不存在該值,它將替換字符串(empty) 當然,您可以在此處放置任何所需的替代字符串。

Optional是最終的,因此在將來的Java版本中將更容易將其轉換為值類型 有關值類型的信息,請參閱Valhalla項目,以獲取有關概述和背景的信息,尤其是“值的狀態”

Optional也打算是不可變的,因此必須防止子類化。 參見Bloch, 有效的Java ,條款15。

你不能

無法從其源代碼外部更改類的方法的行為。 因此,您唯一的選擇是:

  1. 轉到該類的源代碼並在那里進行更改
  2. 擴展類,重寫方法,然后使用派生類的對象

在您的情況下,兩種選擇都不可行。 抱歉,故事結束了。

(是的,其他解釋語言可以允許您這樣做;但是Java不允許)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM