我应该在我的包装类中使用 Java 8 的 Optional 还是在不使用某些属性时使用 null?



我为几个字符串编写了一个包装类。

public class StringsWrapper { 
private String name;
private String surname;
private String socialSecurity;

public StringsWrapper()
{
name = null;
surname = null;
socialSecurity = null;
}
//getters and setters
...}

有三种情况:

  • 我将只设置名字和姓氏,留下socialSecurity = null
  • 我只会设置姓氏和社会保障,leaving name = null
  • 我只会设置姓氏、leaving name = nullsocialSecurity = null

我的问题:当不需要属性时最好使用 null,或者我应该使用 Java 8Optional的实例?

如果你想指出其中一些是可为空的,而其余的代码使用流/可选等,你可以让getters返回optionals:

Optional<String> getName() {
return Optional.ofNullable(name);
}
Optional<String> getSurname() ...
etc.

不应将实际字段类型设置为Optionals。一个原因是这些是不可序列化的。

但一般来说,您描述的用例可能更适合一些boolean歧视性方法,例如您以后可以使用的isSocialSecurityProvided()

if (sw.isSocialSecutiryProvided()) {
// do something with
sw.getSocialSecurity();
} else {
//do domething with
sw.getName();
// and with 
sw.getSurname();
}

即使整个方法看起来像下面的东西,人们也可以争辩说,正确命名它可以提供更好的代码可读性:

public boolean isSocialSecurityProvided() {
return socialSecurity != null;
}

我建议在这种情况下使用 null,您将来可以更改它

最新更新