设置java类属性的值范围

时间:2019-03-01 11:54:04

标签: java

是否可以在构造函数中为java类属性设置值范围?

我知道您可以使用if语句在set-methods中进行类似的操作,但这不是我想要的。

谢谢。

示例类“物品”:

public class Items {
public int id;
public String from;
public String to;

public Items(int id, String from, String to) {
    this.id=id;
    this.from=from;
    this.to=to;
}

设置器中的值范围:

public void setId(int id){
    if(id>10 && id<100){
        this.id=id;
    }
}

您可以在委托方做类似的事情吗? (用于整数和字符串)

1 个答案:

答案 0 :(得分:1)

您最好使类通过私有构造函数不可变,然后使用static工厂方法:

public final class Items {
    public final int id;
    public final String from;
    public final String to;

    private Items(int id, String from, String to) {
        this.id=id;
        this.from=from;
        this.to=to;
    }

    public static Items create(int id, String from, String to) {
        // check that id is in a valid range
        if(id <= 10 || id >= 100){
            throw new IllegalArgumentException("Id must be between 10 and 100");
        }

        // here you can check "from" and "to" too and check that they are valid

        // if no exception has been thrown 
        // then we can safely say that the arguments are valid
        return new Items(id, from, to);
    }
}

这种方法的优点是:

  • Items的任何字段都不会改变,因为您已经使每个字段以及类final都可以直接安全地供多个线程使用({ff这些字段也是不可变的。
  • 如果传递无效参数,则不会构造任何对象。通常不建议在构造函数中引发异常。由于该对象处于创建阶段,然后被丢弃

您会在jdk的许多类中以及许多库中看到这种方法。