我有一个实例变量定义为:
final Optional<myClass> myOptional;
我想覆盖其toString()
方法,这样它就不会返回"[Optional(the value)]"
而只返回"(the value)"
(如果它是空的,则返回其他内容)。但我无法创建Optional
的子类,因为它显然是最终的。我怎样才能做到这一点?
答案 0 :(得分:3)
GhostCat是正确的,因为您无法继承Optional
并覆盖其toString
方法。但是,你可以通过写下这个来获得你想要的效果:
String myString = myOptional.map(MyClass::toString).orElse("(empty)")
如果值存在,则会将myString
设置为值toString
方法的结果,否则如果值不存在,则将(empty)
替换为字符串Optional
。当然,你可以把你想要的任何替代字符串放在那里。
Optional
是最终的,因此在将来的Java版本中将更容易转换为值类型。有关值类型的信息,请参阅Project Valhalla,特别是State of the Values的概述和背景信息。
- (void)myMethod
{
#if DEBUG
[ClassMethod enableLogging];
#endif
}
也是不可变的,因此必须防止子类化。请参阅Bloch, Effective Java ,第15项。
答案 1 :(得分:2)
你不能。
无法从外部源代码更改类方法的行为。所以,你唯一的选择是:
在您的情况下,两种选择都不可能。对不起,故事结束。
(是的,其他解释性语言允许你这样做;但Java没有)。