这是糟糕的编程习惯,但我被要求将其作为更大任务的一部分。
我正在创建一个超类,然后是2个子类。超类中有一个静态方法,它应该根据结果返回2个子类中的任何一个。我该如何编写这种方法?
例如我需要做这样的事情
public abstract class Superclass{
public static subclass? createFromFilename(String fileName){
if(1==1)
return subclass1;
else
return subclass2;
}
}
这甚至可能吗?
答案 0 :(得分:4)
我不确定这是否是您要找的,但是如果您想要返回class type,您可以通过编写子类名称并附加.class
来获取该类来实现类型。正确的返回类型是类型Class
,其中generic将结果限制为超类及其子类。
public static Class<? extends Superclass> createFromFileName(String fileName) {
if (fileName.equals("A")) {
return SubclassA.class;
} else {
return SubclassB.class;
}
}
但是,如果要返回相应类的对象,只需返回一个新实例并将返回类型设置为Superclass
即可:
public static Superclass createFromFileName(String fileName) {
if (fileName.equals("A")) {
new SubclassA();
} else {
new SubclassB();
}
}
答案 1 :(得分:1)
你可以这样做
public abstract superClass
{
public static superClass getBaseClass(...)
{
if(...)
{
return new baseClass1();//baseClass1 should derive from superClass
}
else
{
return new baseClass2();//baseClass2 should derive from superClass
}
}
}
你现在可以这样做
superClass sc=superClass.getBaseClass(..);
if(sc instanceof baseClass1)
{
baseClass1 bc1=(baseClass1)sc;
//work with bc1...
}
if(sc instanceof baseClass2)
{
baseClass2 bc2=(baseClass2)sc;
//work with bc2...
}
答案 2 :(得分:0)
您正在尝试确定执行该方法的结果的返回类型。这是不可能的。所以你必须承担共同的超类返回类型。顺便说一句,如果你在编译时知道正确的返回类型,为什么不改变(有两种方法?)方法来反映它?