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