java - 您可以通过公共(public)嵌套接口(interface)访问私有(private)[静态]嵌套类吗?

标签 java oop

好的,这是设置:

EnclosingClass {

    public interface ClassFactory {
        public static SomeClass getInstance(int which);
    }

    private static ClassFactoryImpl {
        @Override
        public static SomeClass getInstance(int which) {
            switch(which) {
            case 1:
                return new SomeClassSubclassA();
            case 2:
                return new SomeClassSubclassB();
            ...
            }
        }
    }
}

我希望能够发表以下声明:

SomeClass x = EnclosingClass.ClassFactory.getInstance(instanceClassRequest);

这可能吗?如果没有,我如何仅通过静态嵌套类实现的接口(interface)来访问它?

最佳答案

简短的回答是“不”。您需要创建一个实现类的实例并将其放入静态变量中。它看起来像这样:

public class EnclosingClass {
    public interface ClassFactory {
        public SomeClass getInstance(int which);
    }
    public static final ClassFactory CLASS_FACTORY;

    private static class ClassFactoryImpl implements ClassFactory {
        public SomeClass getInstance(int which) { /* ... */ }
    }

    static {
        CLASS_FACTORY = new ClassFactoryImpl();
    }
}

另请注意,实例上的方法不再是静态的。

然后调用它的代码将如下所示:

SomeClass x = EnclosingClass.CLASS_FACTORY.getInstance(2);

关于java - 您可以通过公共(public)嵌套接口(interface)访问私有(private)[静态]嵌套类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369165/

相关文章:

java scala交叉编译相同模块错误java : cannot find symbol

php - 在类里面使用 $_GET

java - 我可以将 ActionListener 添加到 jFrame 中的按钮并在不同的类中使用 actionPerformed 方法吗?

PHP 类继承 - 内存不足

java - 从 java 到 scala 集合的隐式转换成本

java - Java中应该使用哪种数据结构

java - 使用 xml 隐藏 eclipse 中的透视图

具有固定边框的 Java GUI Jlabel

ruby - Square 和 Rectangle 继承有什么问题?

Javascript 面向对象的语法引用