我为几个字符串编写了一个包装类。
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 = null
和socialSecurity = null
我的问题:当不需要属性时最好使用 null,或者我应该使用 Java 8Optional
的实例?
如果你想指出其中一些是可为空的,而其余的代码使用流/可选等,你可以让getters返回optionals:
Optional<String> getName() {
return Optional.ofNullable(name);
}
Optional<String> getSurname() ...
etc.
不应将实际字段类型设置为Optional
s。一个原因是这些是不可序列化的。
但一般来说,您描述的用例可能更适合一些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,您将来可以更改它