3

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

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

例如我需要做这样的事情

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

这甚至可能吗?

4

3 回答 3

4

我不确定这是否是您要查找的内容,但如果您想返回类类型,您可以通过编写子类名称并附加 a.class来获取类类型。正确的返回类型将是Class具有泛型将结果限制为超类及其子类的类型。

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();
     }
}
于 2013-01-27T17:25:59.373 回答
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...
}
于 2013-01-27T17:26:09.607 回答
0

您正在尝试确定作为方法执行结果的返回类型。这是不可能的。所以你必须忍受有共同的超类返回类型。顺便说一句,如果您在编译时知道正确的返回类型,为什么不更改(有 2 个方法?)方法来反映这一点?

于 2013-01-27T17:50:49.513 回答