我正在尝试创建耐心和过敏类,并且对setAllergies中的列表过敏感到困惑,无论是否应该:

    this.allergies = allergies;


要么

    allergies.add(allergies);


患者类别:

public class Patient {

    private List<Allergy> allergies;

    public List<Allergy> getAllergies() {
        return allergies;
    }

    public void setAllergies(List<Allergy> allergies) {
        this.allergies = allergies;
    }

}


过敏等级:

public class Allergy {
    private String name;
    private Severity severity;

    public Allergy(String name, Severity severity) {
        this.name = name;
        this.severity = severity;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Severity getSeverity() {
        return severity;
    }

    public void setSeverity(Severity severity) {
        this.severity = severity;
    }
}

最佳答案

allergies.add(allergies);


向自身添加一个对象。为什么这样做?
此外,您不能使用add()将列表添加到列表。您必须使用addAll()



实际上,创建allergies实例时,null字段是Patient

结果,这样做:allergies.invokeSomething(...);将抛出NullPointerException
此外,“ set”前缀具有覆盖/替换而不是添加的语义。
因此,您应该保持当前编写的方法:

public void setAllergies(List<Allergy> allergies) {
    this.allergies = allergies;
}


现在,如果要提供一种将Allergies添加到Allergies字段中包含的allergies对象的方法,则应提供一种方法addAllergies()

public void addAllergies(List<Allergy> allergies) {
    this.allergies.addAll(allergies);
}


并且您还应该在其声明中(或在allergies的构造函数中)初始化Patient字段:

private List<Allergy> allergies = new ArrayList<>();

关于java - 在Java中设计类时在ArrayList中添加对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44873062/

10-10 11:58