【发布时间】:2015-03-02 23:33:43
【问题描述】:
我有这样的课。
public class SomeClass {
private Optional<String> testString;
public SomeClass() {
populateFields();
}
public Optional<String> getTestString() {
return testString;
}
private void populateFields() {
if(//something is going false here){
testString = functionThatReturnsOptionalString();
}
}
}
现在 instanceOfSomeClass.getTestString() 返回 null。 Optional 不是总是应该包含非空值或为空吗?我正在尝试或避免 isNull() 并在我的调用者中使用 isEmpty()。
如果我在 populateFields() 的第一行放置一个断点并检查 testString 中的值,它会显示该值为 null。这意味着该字段的默认值(在分配任何内容之前)为空。
请说明这种情况;以及 Optional 的正确用法?
【问题讨论】:
-
你可以初始化
testString:private Optional<String> testString = new Optional... -
@helpYou - 或者更确切地说,使用静态工厂方法:
Optional.absent()(如果您使用 Guava 选项或Optional.empty()用于 Java 8 选项)。 -
Optional 没有什么特别的魔力——它和其他类一样。这意味着可选引用(与所有引用一样)的默认值为 null。
标签: java nullpointerexception null optional