Optional Java 8中引入的类型对于许多开发人员来说是一件新事物.
一个getter方法返回Optional<Foo>类型代替经典的Foo一个好习惯吗?假设值可以null.
我有一个类Address看起来像这样:
@Value
class Address {
@NotNull String userId;
@NotNull String line1;
String line2;
private Address(Builder b) {
// copy everything from builder
}
// override getter for line2 so that it returns Optional<String>
public Optional<String> getLine2() {
return Optional.ofNullable(this.line2);
}
// and a Builder
public static class Builder {
// builder methods
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我被迫写Builder了一个Getter因为,如果我想在使用Lombok时返回一个Optional,我必须声明line2为Optional<String>.这将生成一个接受的构建器方法Optional<String>!
还有其他方法可以使用lombok Optional吗?
我学习Scala已有一段时间了,无法清楚地了解Option的用法.当我链接函数时,它可以帮助我避免空值检查(根据文档).这对我来说很清楚:)
接下来我看到Option可以作为开发人员的一种指示器,这里可以使用null值,并且必须对其进行处理.这是真的吗?如果是,我应该使用选项吗?例如
class Racer {
val car = new Car()
}
Run Code Online (Sandbox Code Playgroud)
我有Racer类,我确定car field不能为null(因为它是常量并在创建Racer实例时得到一个值).这里不需要选项.
class Racer {
var car = new Car()
}
Run Code Online (Sandbox Code Playgroud)
在这里,我这样做,以便汽车可以改变.并且有人可以为汽车分配零.我应该在这里使用Option吗?如果是,我注意到我所有的班级字段都是Option的候选者.我的代码看起来像这样
class Racer {
var car: Option[Car] = None
var currentRace: Option[Race] = None
var team: Option[Team] = None
...
}
Run Code Online (Sandbox Code Playgroud)
它看起来不错吗?对我来说,似乎有点过度使用.
def foo(): Result = {
if( something )
new Result()
else
null
}
Run Code Online (Sandbox Code Playgroud)
我有一个可以返回null的方法.我应该返回Option吗?如果方法可以返回null,我是否应该总是这样做?
任何有关它的想法都会有所帮助.提前致谢!
我的问题类似于为什么选项,但我认为它不一样.它更多的是关于何时,而不是为什么.:)