【发布时间】:2012-12-20 10:11:09
【问题描述】:
如果我们想防止在 Java 中实例化对象,我们可以使用几种方法,其中最明显的是:
- 抽象关键字
- 私有/受保护的构造函数
假设类不包含抽象方法,我们使用 abstract 关键字来阻止对象的创建。这种方法不正确(我的意思不是语法正确,而是语义)?还是在这种情况下使用私有构造函数更好?
谢谢
UPD 类将是其他类的基类,尽管它不包含抽象方法。就我而言,它是一些“AbstractTestBase”,其中包含一些通用数据和实用方法,可供某些集成/单元测试组使用。
【问题讨论】:
-
带有私有构造函数的最终类...
-
我会说只有当您打算将类子类化时才使用
abstract。如果它是不可实例化的实用程序类或类似的:抛出AssertionError的私有构造函数 -
@PradeepSimha,我也会这样做 - 并且可能会添加
throws java.lang.UnsupportedOperationException,因此读者的意图立即显而易见。但这是细节。 -
@volodymyr 如果您希望它被子类化,您应该只使用
abstract关键字:这是预期用途。您不应该使用其他任何东西,因为构造函数will仍然作为子对象实例化链的一部分被调用。 -
@volodymyr 拿起一本《Effective Java》来回答这类问题
标签: java oop coding-style semantics