如何使内部类不可实例?(How do I make the Inner Class uninstan

2019-10-21 10:44发布

我想,不能由外部类实例化,甚至一个静态内部类。 现在我只是有说“请不要将此对象实例”一个文档。 我可以提供一个更好的信号?

Answer 1:

我想,不能由外部类实例化,甚至一个静态内部类。

我认为“外部类”的真正含义封闭类。

  • 如果你不希望限制封装类,则使得内部类的唯一的构造private会产生预期的效果。

  • 如果你想限制封装类,答案是没有办法做到这一点。 如果你声明的内部类的构造函数为private ,封闭类仍然可以访问并创建实例。 如果你声明的内部类的abstract ,封装类仍然可以声明一个子类,实例化类。

不过,我认为,这(即防止内部类的所有实例化)是一个毫无意义的工作。 在内部类的任何非静态声明不能以任何方式使用,并且任何静态声明不妨在封闭类中声明。

除此之外,任何你做,以“防止”从实例内部类的外部类可以通过编辑包含两个类的源文件被规避。 甚至有一类private构造函数可以使用反射,如果你去正确的方式进行实例化。



Answer 2:

重构它,让它匿名类。



Answer 3:

首先创建一个单独的文件如下:

public Do_Not_Instantiate_This_Class extends Exception {
    /*
    *Please Do Not Instantiate This Class
    */
    private static final long serialVersionUID = 1L;
}

然后,使一个构造你的内部类,这只是

private final innerClass() throws Do_Not_Instantiate_This_Class {
    throw(new Do_Not_Instantiate_This_Class());
}

这样一来,没有比外部类的其他类可以“看到”的构造,与外部类不能使用构造,而无需使用try / catch或抛出Do_Not_Instantiate_This_Class的声明,以连编译,它总是会赶上或扔在运行时。 不是完全最优的,但我认为它完成了,你希望它是什么。



文章来源: How do I make the Inner Class uninstantiable?