超类静态方法返回2个不同的子类

时间:2013-01-27 17:21:30

标签: java

这是糟糕的编程习惯,但我被要求将其作为更大任务的一部分。

我正在创建一个超类,然后是2个子类。超类中有一个静态方法,它应该根据结果返回2个子类中的任何一个。我该如何编写这种方法?

例如我需要做这样的事情

public abstract class Superclass{
    public static subclass? createFromFilename(String fileName){
            if(1==1)
               return subclass1;
            else
                   return subclass2;
    }
}

这甚至可能吗?

3 个答案:

答案 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)

您正在尝试确定执行该方法的结果的返回类型。这是不可能的。所以你必须承担共同的超类返回类型。顺便说一句,如果你在编译时知道正确的返回类型,为什么不改变(有两种方法?)方法来反映它?