好的,这是设置:
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);
这可能吗?如果没有,我如何只通过它实现的接口访问静态嵌套类?
答案 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);