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(“其他文件”)
时,它将被编译为调用超类。因此,每个子类型都应该有一个创建方法,然后可以将公共实现移动到另一个方法中。你可能会发现抽象工厂很有用。