1

我想要一个即使外部类也无法实例化的静态内部类。现在我只有一个文档,上面写着“请不要实例化这个对象”。我能给出更好的信号吗?

4

3 回答 3

8

我想要一个即使外部类也无法实例化的静态内部类。

我认为“外部类”实际上是指封闭类。

  • 如果您不想限制封闭类,那么制作内部类的唯一构造函数private将具有预期的效果。

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

但是,我认为这(即阻止所有内部类的实例化)是毫无意义的练习。内部类中的任何非静态声明都不能以任何方式使用,任何静态声明也可以在封闭类中声明。

此外,您为“阻止”封闭类实例化内部类所做的任何事情都可以通过编辑包含这两个类的源文件来规避。private如果您以正确的方式进行,即使是具有构造函数的类也可以使用反射进行实例化。

于 2010-05-02T02:28:37.753 回答
0

重组它并使其成为一个匿名类。

于 2010-05-02T02:30:16.053 回答
0

首先在单独的文件中创建以下内容:

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());
}

这样,除了外部类之外,没有其他类可以“看到”构造函数,并且外部类不能使用构造函数而没有 Do_Not_Instantiate_This_Class 的 try/catch 或 throws 声明以进行编译,并且它总是会捕获或抛出它在运行时。不是完全最优的,但我认为它可以完成你想要的。

于 2013-12-22T04:31:55.687 回答