【发布时间】:2016-12-17 05:42:06
【问题描述】:
Java 允许非最终类的构造函数调用任何实例方法,即使这些方法是抽象的或非最终的。
这被认为是一种不好的做法(参见,例如,Effective Java 2nd Edition,Item 17),并且由于定义的构造函数顺序,在 C++ 中是不可能的。
我的问题是为什么在 Java 语言的设计中允许这样做?似乎它可以作为语言限制被禁止。是否有必要这样做?
【问题讨论】:
-
使编译更加困难。 Just don't do it.
-
如何让编译变得更加困难?如果该语言有“构造函数只能调用私有或最终实例方法”之类的限制,那么在编译时似乎应该很容易验证。我问这个问题是因为我正在研究很多广泛执行此操作的遗留代码,所以我想知道为什么这可以开始。
-
这是不好的做法,原因与泄露
this -
为了这个问题,除了引用来源之外,最好包括(您认为)它不好的实际原因。而不是仅仅说这被认为是不好的做法。
标签: java