具有可选<string>的构造方法

时间:2015-07-20 23:47:58

标签: java constructor optional

我写了以下代码:

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

我该如何解决?

最好的问候,

2 个答案:

答案 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的构造函数。