我编写了以下代码:
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
.
如何解决?
最诚挚的问候,
最佳答案
安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
s,有时确实有意义,是修复 super()
构造函数也采用 Optional<String>
。如果你不能这样做,你需要类似地调用 .get()
并传递结果 String
进入super()
;再次根据需要处理缺席的情况。
关于java - 带有可选<String>的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31528143/