是否可以在构造函数中为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;
}
}
您可以在委托方做类似的事情吗? (用于整数和字符串)
答案 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的许多类中以及许多库中看到这种方法。