【发布时间】:2012-01-04 22:19:46
【问题描述】:
我找到了一个article,上面有一段有趣的代码:
public class Employee {
private String firstName;
private String lastName;
//private default constructor
private Employee(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public static Employee valueOf (String firstName, String lastName) {
return new Employee(firstName, lastName);
}
}
我真的很想了解创建这种类的优势。 我知道这里这个类的一个对象是不可变的,因为一旦初始化就没有办法改变它的变量值。我以前从来没有做过这样的事情,我真的不明白它的好处。
- 为什么这是一个好的做法?
- 您能说出一种可以使用这种方法的情况吗?
- 常量或只读变量呢?是不是很相似?
- 在文章中说,这对应用程序的性能不利。 但是为什么?
【问题讨论】:
-
可变状态使得我们很难推断代码的作用。研究函数式编程。
-
这个类没有访问器方法。这是故意的吗?
-
有用的文章如果你还没有读过:javapractices.com/topic/TopicAction.do?Id=29
-
只是一个旁注:为了让这个类是不可变的,这个类必须是最终的;字段也必须是最终的。
-
那篇文章太糟糕了!不要听从它的建议,它所做的许多陈述都是完全错误的。例如,“引用 1”是错误的:在现代 JVM 中,对象实例化非常快。 “引用 2”指出将实例字段公开是不好的,然后展示了同样糟糕的“最佳方法”:从 getter 中泄漏可变对象(工作日数组)。啊。我认为那篇文章中的每一点都至少有一个问题。
标签: java