0

我有一个 bean 类,比如Teacher,它的状态为activeinactive,每个状态都有一个标识符。为了实现这种行为,我的团队决定使用具有idname属性的 Status bean。

现在,假设我是使用Teacher bean 的服务的客户。为了使用上述服务,我必须创建Teacher bean:

Teacher teacher = new Teacher();
teacher.setName("Some name");
...
Status status = new Status();
status.setId(1);
...
teacher.setStatus(status);

问题是:如果我们将Teacher.getStatus()实现为

Status status = null;

Status getStatus() {
    if (status != null) {
        return status;
    } else {
        return new Status();
    }
}

所以我不会在任何时候调用Status构造函数来创建一个Teacher bean。像这样:

Teacher teacher = new Teacher();
teacher.setName("Some name");
teacher.getStatus().setId(1);

这会被认为是一种不好的做法吗?如果是这样,为什么?

4

2 回答 2

2

这本身并不是一个坏习惯,但在这个例子中似乎没有必要。如果您正在为其编写 getter 的对象在构造上有很多开销 - 例如,如果它被从数据库中拉出 - 这种通用方法是非常合理的。但是,您需要解决一件事。与其创建和返回一个新的 Status 对象,不如设置this.status=new Status()并返回它。这样,如果您调用getStatus()两次,就不会创建两个新的 Status 对象。

于 2013-06-11T18:41:02.407 回答
1

我认为在函数中返回一个新的是一个糟糕的设计。它会让你陷入内存泄漏。每次调用 getStatus 时,您都会创建一个新状态而不删除它。您可以轻松地拥有像这样的相同设计:

Teacher teacher = new Teacher();
teacher.setName("some name");
teacher.getStatus().setId(1);

public class Teacher{
    private Status myStatus = new Status();
    public void Teacher(){...}
    public Status getStatus(){return myStatus;}
}

public class Status{
    private int Id = 0;
    public void Status(){...}
    public void setId(int p_id){Id = p_id}
}
于 2013-06-11T18:37:49.207 回答