Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回2个不同子类的超类静态方法_Java - Fatal编程技术网

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

Java 返回2个不同子类的超类静态方法,java,Java,这是一个糟糕的编程实践,但我被要求作为更大任务的一部分来做 我正在创建一个超类,然后创建两个子类。超类中有一个静态方法,根据结果返回两个子类中的任何一个。我该怎么写这个方法呢 例如,我需要做这样的事情 public abstract class Superclass{ public static subclass? createFromFilename(String fileName){ if(1==1) return subclas

这是一个糟糕的编程实践,但我被要求作为更大任务的一部分来做

我正在创建一个超类,然后创建两个子类。超类中有一个静态方法,根据结果返回两个子类中的任何一个。我该怎么写这个方法呢

例如,我需要做这样的事情

public abstract class Superclass{
    public static subclass? createFromFilename(String fileName){
            if(1==1)
               return subclass1;
            else
                   return subclass2;
    }
}
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
           }
     }
}

这可能吗?

我不确定这是否是您要查找的,但是如果您想返回,可以通过写入子类名称并附加一个
.class
来获取类类型。一个合适的返回类型应该是
Class
,将结果限制为超类及其子类

public static Class<? extends Superclass> createFromFileName(String fileName) {
     if (fileName.equals("A")) {
          return SubclassA.class;
     } else {
          return SubclassB.class;
     }
}

你可以这样做

public abstract class Superclass{
    public static subclass? createFromFilename(String fileName){
            if(1==1)
               return subclass1;
            else
                   return subclass2;
    }
}
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...
}

您正试图确定作为方法执行结果的返回类型。这是不可能做到的。因此,您必须忍受使用公共超类返回类型。顺便说一句,如果您在编译时知道正确的返回类型,为什么不更改(有两个方法?)方法以反映这一点?

您对
超类.createFromFilename(“我的文件”)
有什么期望?实际上,当您编写
MySubclass.createFromFilename(“其他文件”)
时,它将被编译为调用
超类。因此,每个子类型都应该有一个创建方法,然后可以将公共实现移动到另一个方法中。你可能会发现抽象工厂很有用。