防止Java中实例化的正确方法
如果我们想防止在Java中实例化对象,我们可以使用几种方法,其中最明显的是:防止Java中实例化的正确方法,java,oop,coding-style,semantics,Java,Oop,Coding Style,Semantics,如果我们想防止在Java中实例化对象,我们可以使用几种方法,其中最明显的是: 抽象关键字 私有/受保护构造函数 假设类不包含抽象方法,我们使用abstract关键字来阻止对象的创建。这种方法是否不正确(我的意思不是语法正确性,而是语义正确性)?或者在这种情况下最好使用私有构造函数 谢谢 UPD 类将是其他类的基类,尽管它不包含抽象方法。在我的例子中,它是一些“AbstractTestBase”,其中包含一些常见的数据和实用方法,可以被一些集成/单元测试组使用。由于您想将类用作子类,建议“带有私有
类将是其他类的基类,尽管它不包含抽象方法。在我的例子中,它是一些“AbstractTestBase”,其中包含一些常见的数据和实用方法,可以被一些集成/单元测试组使用。由于您想将类用作子类,建议“带有私有构造函数的最终类”显然不起作用,因此您必须采用“抽象”方式。从“抽象类”的定义来看,这是legetimate,因为该定义准确地说明了您想要什么: 抽象类是一个声明为抽象的类,它可能是抽象的,也可能是抽象的 不包括抽象方法。抽象类无法实例化, 但它们可以是子类的
带有私有构造函数的最后一个类……我想说,只有当您打算对该类进行子类化时,才使用
abstract
。如果它是一个不可实例化的实用程序类或类似的类:一个抛出AssertionError
@PradeepSimha的私有构造函数,我也会这样做,并且可能会添加一个抛出java.lang.UnsupportedOperationException
,因此读者很快就会明白它的意图。但这是细节。@volodymyr如果你想对它进行子类化,你应该只使用abstract
关键字:这就是你想要的用途。您不应该使用其他任何东西,因为构造函数仍将作为子对象实例化链的一部分被调用。@volodymyr拿起一份“有效Java”来回答这类问题