Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止Java中实例化的正确方法_Java_Oop_Coding Style_Semantics - Fatal编程技术网

防止Java中实例化的正确方法

防止Java中实例化的正确方法,java,oop,coding-style,semantics,Java,Oop,Coding Style,Semantics,如果我们想防止在Java中实例化对象,我们可以使用几种方法,其中最明显的是: 抽象关键字 私有/受保护构造函数 假设类不包含抽象方法,我们使用abstract关键字来阻止对象的创建。这种方法是否不正确(我的意思不是语法正确性,而是语义正确性)?或者在这种情况下最好使用私有构造函数 谢谢 UPD 类将是其他类的基类,尽管它不包含抽象方法。在我的例子中,它是一些“AbstractTestBase”,其中包含一些常见的数据和实用方法,可以被一些集成/单元测试组使用。由于您想将类用作子类,建议“带有私有

如果我们想防止在Java中实例化对象,我们可以使用几种方法,其中最明显的是:

  • 抽象关键字
  • 私有/受保护构造函数
  • 假设类不包含抽象方法,我们使用abstract关键字来阻止对象的创建。这种方法是否不正确(我的意思不是语法正确性,而是语义正确性)?或者在这种情况下最好使用私有构造函数

    谢谢

    UPD
    类将是其他类的基类,尽管它不包含抽象方法。在我的例子中,它是一些“AbstractTestBase”,其中包含一些常见的数据和实用方法,可以被一些集成/单元测试组使用。

    由于您想将类用作子类,建议“带有私有构造函数的最终类”显然不起作用,因此您必须采用“抽象”方式。从“抽象类”的定义来看,这是legetimate,因为该定义准确地说明了您想要什么:

    抽象类是一个声明为抽象的类,它可能是抽象的,也可能是抽象的 不包括抽象方法。抽象类无法实例化, 但它们可以是子类的


    带有私有构造函数的最后一个类……我想说,只有当您打算对该类进行子类化时,才使用
    abstract
    。如果它是一个不可实例化的实用程序类或类似的类:一个抛出
    AssertionError
    @PradeepSimha的私有构造函数,我也会这样做,并且可能会添加一个
    抛出java.lang.UnsupportedOperationException
    ,因此读者很快就会明白它的意图。但这是细节。@volodymyr如果你想对它进行子类化,你应该只使用
    abstract
    关键字:这就是你想要的用途。您不应该使用其他任何东西,因为构造函数
    仍将作为子对象实例化链的一部分被调用。@volodymyr拿起一份“有效Java”来回答这类问题