您可以通过公共嵌套接口访问私有[静态]嵌套类吗?

时间:2012-07-06 20:22:01

标签: 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);

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

1 个答案:

答案 0 :(得分:2)

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

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