我写了以下代码:
void Test(A a) {
B b = new B(a.getName());
}
因此,B
的构造函数需要String
。它看起来如下:
protected B (String name) {
super(name, KIND);
this.name = name;
}
但是a.getName()
给了我一个名为Optional<String>
的名称作为返回值,我不想改变它。因此,我尝试更改构造函数B
的参数(我将String name
替换为Optional<String>
),然后Eclipse用红色标记super(name, KIND)
和this.name = name
Eclipse建议再次将构造函数的参数更改为String name
。
我该如何解决?
最好的问候,
答案 0 :(得分:1)
Optional<String>
可能包含String
,因此您需要检查(通常来说,处理不存在的情况)。因此,您的Test()
方法可能如下所示:
void Test(A a){
// Consider adding a a.getName().isPresent() check and handling the false
// case if you need to. Otherwise you'll get an IllegalStateException.
B b = new B (a.getName().get());
}
通常,更好的做法是将构造函数参数保留为String
,然后在存储时将其转换为n Optional<String>
。
另一种方法是,如果你真的希望用户传入Optional
,这有时是有意义的,那就是修复super()
构造函数以获取Optional<String>
。如果您不能这样做,则需要同样致电.get()
并将结果String
传递给super()
;再次根据需要处理缺席案件。
答案 1 :(得分:0)
你可以创建另一个带有aan Optional的构造函数。