【发布时间】:2017-05-24 14:29:13
【问题描述】:
目前我有这个代码:
public final class Tutor {
private String name;
private final Set<Student> tutees;
public Tutor(String name, Student[] students){
this.name = name;
tutees = new HashSet<Student>();
for (int i = 0; i<students.length; i++)
tutees.add(students[i]);
}
我正在尝试重写它(只是在纸上),以便它制作/添加学生的防御性副本,而不是直接将它们添加到哈希集中,我想知道以下代码是否会这样做:
public final class Tutor {
private String name;
private final Set<Student> tutees;
public Tutor(String name, Student[] students){
this.name = name;
tutees = new HashSet<Student>();
for (int i = 0; i<students.length; i++)
tutees.add(students[i](students.getName(), students.getCourse());
}
学生代码(如果需要):
public class Student {
private String name;
private String course;
public Student(String name, String course){
this.name = name;
this.course = course;
}
public String getName() { return name; }
public String getCourse() { return course; }
public void setName(String name) {
this.name = name;
}
public void setCourse(String course){
this.course = course;
}
}
谢谢
【问题讨论】:
-
首先使用编译器。它会发现至少一个错误。接下来,考虑为 Student 编写一个以 Student 作为参数的构造函数——封装在 Student 类中复制学生所需的内容。
标签: java hashset defensive-programming defensive-copy