美文网首页
通过私有构造器强化不可实例化的能力

通过私有构造器强化不可实例化的能力

作者: Luuuuuuffy | 来源:发表于2017-03-24 14:53 被阅读0次

    编写只包含静态方法和静态域的类,比如我们常写的Util类。我们不希望类被实例化,实例对它没有任何意义。
    Java在缺少显式构造器的情况下,编译器会自动提供一个公有的,无参的缺省构造器,有潜在的被实例化的风险。
    我们可以显式的指定一个私有的构造器,代码如下:

    // Noninstantiable utility class
    public class UtilityClass {
    
        // Suppress default constructor for noninstantiability
        private UtilityClass() {
            throw new AssertionError();
        }
        
    }
    

    AssertionError不是必需的,但是可以避免不小心在类的内部调用构造器,或者是反射攻击,保证了该类在任何情况下都不被实例化。
    注意:没有公有的构造器,导致这个类不能被子类化,所有的构造器都必须显式或隐式的调用超类构造器。
    另外,企图通过将类做成抽象类强制该类不可被实例化是行不通的。因为该类可以被子类化。

    相关文章

      网友评论

          本文标题:通过私有构造器强化不可实例化的能力

          本文链接:https://www.haomeiwen.com/subject/swkfottx.html