Если у меня есть иерархия классов, подобная этой
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 или я просто делаю это неправильно?