Java Getter和setter问题

Java Getter和setter问题,java,return,setter,getter,Java,Return,Setter,Getter,我在这里是新来的,在Java也是新来的。我有一个Java作业,问题是: 该类应具有以下方法: 一个没有参数的构造函数,它将名称初始化为“未知”,将尿素和蛋白质水平初始化为0.0,将bleedIgHistory值初始化为false 一个构造函数,它接收名称和出血历史的参数,并将尿素水平和蛋白质水平初始化为0.0 所有实例变量的getter 所有实例变量的setter,以及 以下: 名称不能为空 尿素水平必须介于0和10之间(含0和10) 蛋白质水平必须介于0和150之间(含0和150) 如果传

我在这里是新来的,在Java也是新来的。我有一个Java作业,问题是:

该类应具有以下方法:

  • 一个没有参数的构造函数,它将名称初始化为“未知”,将尿素和蛋白质水平初始化为0.0,将bleedIgHistory值初始化为false
  • 一个构造函数,它接收名称和出血历史的参数,并将尿素水平和蛋白质水平初始化为0.0
  • 所有实例变量的getter
  • 所有实例变量的setter,以及 以下:

    • 名称不能为空

    • 尿素水平必须介于0和10之间(含0和10)

    • 蛋白质水平必须介于0和150之间(含0和150)

  • 如果传递给setter的任何值无效,则不要更改实例变量的值并返回false

    这是实例变量:

    public class Patient {
    
        private String name;
        private boolean bleedingHistory = true;
    
        private double ureaLevel;
        private double proLevel;
    

    因此,我的问题是,如果输入值不正确,如何返回到上面的实例变量。

    这很简单,只要确保setter中有验证输入的if语句即可。如果验证失败,则根本不更改变量;相反,抛出一个IllegalArgumentException,让调用方知道名称没有更改。(信用证:@ADTC)

    例如,下面是患者姓名的设置器:

    public void setName(String newName)  throws IllegalArgumentException
    {
        if(newName != null && !newName.isEmpty()) 
        {
            this.name = newName;
        } 
        else 
        {
            throw new IllegalArgumentException();
        }
    }
    
    if语句的计算结果是:“如果
    newName
    null
    newName
    空,那么我们将用
    newName
    替换
    此.name
    。否则,我们将抛出
    新的IllegalArgumentException()

    请注意,如果if语句的计算结果为
    true
    ,变量
    name
    将替换为
    newName
    ,但是,如果它的计算结果为
    false
    ,我们将抛出
    IllegalArgumentException
    。如果要在代码中调用此方法,则应在try-catch语句中调用它,如下所示:

    try
    {
        setName("John Doe");
    }
    catch(IllegalArgumentException e)
    {
        //Name was not changed. Either it was null, or it was empty.
    }
    

    首先,您需要在构造函数之外声明字段,否则它们只对构造函数可见。首先,这些字段不是实例变量,需要在类级别定义实例变量。再看一看,如果传递给getter的值无效,您不应该以任何方式修改实例字段,因此不应该有问题……哦,对不起,发布了错误的部分。@MadProgrammer,那么您的意思是getter部分我不需要返回任何内容?实际上,当验证失败时,setter应该抛出,以便调用方可以知道验证状态。否则,程序将在假设值已设置的情况下继续运行,而实际上该值尚未设置。@ADTC Great point!我会看看我是否可以将其输入我的答案如果你想得到所有OCD,那么你也可以检查传入的参数是否与类变量中的参数不匹配。如果是一样的,就不要改变它。一些事情,比如……&&n如果(newName!=null&&!newName.isEmpty()&&&!newName.equals(name)){@JacquesRamsden你是对的,这可能也是我也会做的,但他的作业只是检查它是否为空,所以我只放了这么多。@Mitch Talmake 100%同意。:D