调用没有硬编码参数的构造函数(耦合)

时间:2013-10-22 18:06:02

标签: java

我有一个创建新对象Student的方法,并将其添加到数组列表studentRegister:

public void addStudent(String name, String age)
{
     studentRegister.add(new Student(name, age));
}

它在这里调用Student类构造函数:

public Student(String name, String age) 
{
  this.name = name;
  this.age = age;
}

这有效,但它对可维护性有害,因为我必须更改Student类和addStudent方法中的任何其他参数。如何在addStudent阶段输入参数而不在addStudent方法中对它们进行编码?

3 个答案:

答案 0 :(得分:6)

这样做:

public void addStudent(Student s)
{
     studentRegister.add(s);
}

在构造函数/其他方法中,您可以调用上面的方法:

public Student(String name, String age) 
{
  this.name = name;
  this.age = age;
  addStudent(this); //here is the call to the above method
}

答案 1 :(得分:4)

你应该传递一个学生对象 - 而不是两个值。

public void addStudent(Student student)
{
     studentRegister.add(student);
}

答案 2 :(得分:0)

使用

public void addStudent(final Student student) {
    studentRegister.add(student);
}

是更好的方法。

也许您正在寻找一种更简单的方法来构建对象。例如使用连锁二传手:

public class Student {

    private String name;
    private String age;
    private String address;

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public Student setAge(String age) {
        this.age = age;
        return this;
    }

    public String getAddress() {
        return address;
    }

    public Student setAddress(String address) {
        this.address = address;
        return this;
    }
}

那么,那么:

Student student = new Student().setName("User")
                               .setAge("30")
                               .setAddress("New York");

使用普通setter构建对象的另一种方法:

Student student = new Student(){{
    setName("User");
    setAge("30");
    setAddress("30");
}};