java在一个对象中只允许一个非空字段的好方法是什么
我想编写一个包含1个以上不同类型字段的类,但在任何时候,实例对象中只有一个字段具有非空值
到目前为止,我所做的看起来并不干净
class ExclusiveField {
private BigInteger numericParam;
private String stringParam;
private LocalDateTime dateParam;
public void setNumericParam(BigInteger numericParam) {
unsetAll();
this.numericParam = Objects.requireNonNull(numericParam);
}
public void setStringParam(String stringParam) {
unsetAll();
this.stringParam = Objects.requireNonNull(stringParam);
}
public void setDateParam(LocalDateTime dateParam) {
unsetAll();
this.dateParam = Objects.requireNonNull(dateParam);
}
private void unsetAll() {
this.numericParam = null;
this.stringParam = null;
this.dateParam = null;
}
}
Java是以某种方式支持这种模式,还是有更合适的方式支持这种模式
# 1 楼答案
你可以使用反射。两个功能完成了。添加一个新字段?没问题。你甚至不需要改变任何事情
如果可访问性是一个问题,您可以简单地添加一个可访问字段的列表,并对照该列表检查
param
# 2 楼答案
将
unsetAll
方法更改为setAll
:然后从公共设置器调用,如:
请注意},这将在不更改任何内部状态的情况下失败
Objects.requireNonNull
是在setAll
之前计算的,因此,如果要传入null
{# 3 楼答案
为什么不简单