【发布时间】:2018-05-28 19:17:47
【问题描述】:
如果我有这样的类层次结构
AbstractSuperClass
ConcreteClassA
ConcreteClassB
是否有可能在AbstractSuperClass 中有一个静态方法,它返回两个具体类之一的类而不是实例?
我尝试返回 Class<AbstractSuperClass>,但 IDE (Android Studio) 说
Incompatible types.
Required: Class <com.example.AbstractSuperClass>
Found: Class <com.example.ConcreteClassA>
这是我在想的一个例子,但它不起作用:
public abstract class AbstractSuperClass{
public abstract void someAbstractMethod();
public static String getSomeText(){
return "This is AbstractSuperClass";
};
public static Class<AbstractSuperClass> getConcreteClass(int x){
switch( x ){
case 0: return ConcreteClassA.class;
case 1: return ConcreteClassB.class;
}
}
}
public class ConcreteClassA extends AbstractSuperClass{
public abstract void someAbstractMethod(){
// Do something
}
public static String getSomeText(){
return "This is ConcreteClassA";
};
}
public class ConcreteClassB extends AbstractSuperClass{
public abstract void someAbstractMethod(){
// Do something
}
public static String getSomeText(){
return "This is ConcreteClassB";
};
}
AbstractSuperClass.getConcreteClass(1).getSomeText(); // Should return "This is ConcreteClassB"
这在 Java 中是不可能的,还是我做错了?
【问题讨论】:
-
改成
Class<? extends AbstractSuperClass>。
标签: java class reflection