好的,这是设置:
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/