我的目标是使Java对象不可变。我有一个Student
类。我用以下方式对它进行了编码,以实现不变性:
public final class Student {
private String name;
private String age;
public Student(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
}
我的问题是,实现Student
类的不变性的最好方法是什么?
发布于 2013-08-13 02:35:21
严格地说,您的类并不是不可变的,它只是有效地不可变。要使其不可变,您需要使用final
private final String name;
private final String age;
尽管差别可能看起来很微妙,it can make a significant difference in a multi-threaded context。不可变的类本质上是线程安全的,有效不可变的类只有在安全发布的情况下才是线程安全的。
发布于 2013-08-13 02:34:45
使用final
关键字:
private final String name;
private final String age;
发布于 2015-04-17 17:27:13
将变量设为私有且不使用setter方法将适用于原始数据类型。如果我的类有任何对象集合?
使任何具有集合对象的类不可变?
使用扩展集合类编写您自己的集合对象,并遵循私有变量,不使用setter方法。或者返回集合对象的克隆对象。
public final class Student {
private StudentList names;//Which is extended from arraylist
public Student() {
names = DAO.getNamesList()//Which will return All Student names from Database its upto you how you want to implement.
}
public StudentList getStudentList(){
return names;//you need to implement your own methods in StudentList class to iterate your arraylist; or you can return Enumeration object.
}
public Enumeration getStudentNamesIterator(
Enumeration e = Collections.enumeration(names);
return e;
}
public class StudentList extends ArrayList {
}
https://stackoverflow.com/questions/18194139
复制相似问题