我有一个关于继承/强制Java某个属性的某些值的问题我不确定,即使我花了很多时间思考它。我会尽量简单。
所以我有一个抽象类Foo
,它有Lombok注释@Data
:
@Data
public abstract class Foo{
private String id;
protected BoundType type;
public abstract void setBoundType(BoundType boundType);
}
以下是枚举BoundType
:
public enum BoundType {
IN, OUT;
}
我又有两个课程InFoo
和OutFoo
延伸Foo
。 boundType
的InFoo
应始终为枚举类型IN 。另一方面,boundType
中的OutFoo
应始终为枚举类型OUT 。例如:
@Data
public class InFoo extends Foo{
public void setBoundType() {
//ALWAYS HAS TO BE BoundType.IN
}
}
我该如何强制执行此操作?不知道如何设计它。提前谢谢。
答案 0 :(得分:2)
确保构造函数为每个子类设置正确的值,然后确保没有setter,这样就无法改变该值。
另外,请参阅这篇文章Omitting one Setter/Getter in Lombok,了解如何省略BoundType字段的setter。
答案 1 :(得分:1)
应在子类的构造函数中设置正确的值:
public InFoo() {
boundType = BoundType.IN;
}
如果需要使用setter模式,可以执行检查:
public void setBoundType(BoundType boundType) {
if(boundType != BoundType.IN)
throw new IllegalArgumentException();
this.boundType = boundType; // This line is actually unnecessary
}