在Java 8中还有另一种方法来实现这个目标。我需要完成两件事情:
1.使用
java.util.Optional
将可为空的字段包装起来,以便在类型中明确可为空的字段。
2.使用
java.util.Objects.requireNonNull
检查所有非可为空的字段在构造时是否为null。
示例:请忽略此第一个示例,它只是作为评论对话的上下文而保留。跳到推荐选项后(第二个代码块)。
import static java.util.Objects.requireNonNull;
public class Role {
private final UUID guid;
private final String domain;
private final String name;
private final Optional<String> description;
public Role(UUID guid, String domain, String name, Optional<String> description) {
this.guid = requireNonNull(guid);
this.domain = requireNonNull(domain);
this.name = requireNonNull(name);
this.description = requireNonNull(description);
}
}
所以我的问题是,使用Java 8时,我们是否需要注释?
编辑:后来我发现,在参数中使用Optional被认为是一种不好的做法。在这里,有一个讨论其利弊的好文章:
为什么不应该在Java 8中使用Optional作为参数
建议选项是,在参数中使用Optional不是最佳实践,因此我们需要两个构造函数。
public class Role {
private final UUID guid;
private final String domain;
private final String name;
private final Optional<String> description;
public Role(UUID guid, String domain, String name, String description) {
this.guid = requireNonNull(guid);
this.domain = requireNonNull(domain);
this.name = requireNonNull(name);
requireNonNull(description);
this.description = Optional.of(description);
}
public Role(UUID guid, String domain, String name) {
this.guid = requireNonNull(guid);
this.domain = requireNonNull(domain);
this.name = requireNonNull(name);
this.description = Optional.empty();
}
public Optional<String> description(){ return description;}
}
com.sun.istack.internal.NotNull
。天哪... - Thomas Weller