为了账号安全,请及时绑定邮箱和手机立即绑定

java类属性的设置值范围

java类属性的设置值范围

哆啦的时光机 2022-07-14 10:39:37
是否可以在构造函数中为 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;    }}你可以在构造函数中做类似的事情吗?(对于 int 和 string)
查看完整描述

1 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

您最好使用私有构造函数使您的类不可变,然后使用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这将使该类Items可以直接安全地被多个线程使用(如果字段也是不可变的)。

  • 如果您传递无效参数,则不会构造任何对象。通常不鼓励在构造函数中抛出异常。由于对象处于创建阶段,然后被丢弃

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


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 216 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信