0

好的,设置如下:

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

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

4

1 回答 1

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);
于 2012-07-06T20:27:03.437 回答