java中不可变类
package frank; /* 真正的不可变类 */ public class App { private final Name name; public App(final Name name) { this.name = new Name(name.getFirstName(),name.getLastName()); } public Name getName() { return new Name(name.getFirstName(),name.getLastName()); } public static void main(String[] args) { Name name = new Name("悟空","张珊"); App a = new App(name); Name name2 = a.getName(); name2.setFirstName("1"); System.out.println(a.getName().getFirstName()); } } class Name { private String firstName; private String lastName; public Name(String firstName,String lastName) { this.firstName = firstName; this.lastName = lastName; } public void setFirstName(final String firstName) { this.firstName = firstName; } public void setLastName(final String lastName) { this.lastName = lastName; } public String getFirstName() { return this.firstName; } public String getLastName() { return this.lastName; } }
我们在编写不可变类的时候,应该要注意类里面的引用字段,防止通过外面把里面的值改变了。