在子类

时间:2016-09-06 09:44:34

标签: java inheritance enums lombok

我有一个关于继承/强制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;
}

我又有两个课程InFooOutFoo延伸FooboundType InFoo应始终为枚举类型IN 。另一方面,boundType 中的OutFoo应始终为枚举类型OUT 。例如:

@Data
public class InFoo extends Foo{

public void setBoundType() {
    //ALWAYS HAS TO BE BoundType.IN
 }
}

我该如何强制执行此操作?不知道如何设计它。提前谢谢。

2 个答案:

答案 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
}