[英]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。
你不能
无法从其源代码外部更改类的方法的行为。 因此,您唯一的选择是:
在您的情况下,两种选择都不可行。 抱歉,故事结束了。
(是的,其他解释语言可以允许您这样做;但是Java不允许)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.