java - 带有可选<String>的构造函数

标签 java constructor option-type

我编写了以下代码:

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/

相关文章:

java - 使用 Java 连接数据库值并添加到数组

swift - 具有混合类型的 Nil 合并运算符

Swift 嵌套的非可选结构给出了可选的

java - 域驱动开发中的正确 URL

java - 跨两个文件双向解析属性

java - "java.compiler"系统属性的可能值

java - 实例变量如何影响我的构造函数的值?

C++语言oops

c# - 构造函数初始化期间出现问题-下一步是什么?

Jpa @OnetoOne 与 Java8 的关系