所以在下面的例子中,我有一个带有两个子类的抽象超类。我希望方法 someMethod 返回 otherclass 类型的对象,然后我将其转换为 someSuperClass 。如何创建与 otherclass 相同类型的对象的新实例?我想避免让它成为一个抽象方法,然后在每个子类中定义它。
public abstract class SomeSuperClass {
public SomeSuperClass() {
}
public SomeSuperClass someMethod(SomeSuperClass otherClass) {
return (SomeSuperClass) ????
}
}
public class SomeSubClass extends SomeSuperClass {
public SomeSubClass() {
super();
}
}
public class SomeOtherSubClass extends SomeSuperClass {
public SomeOtherSubClass() {
super();
}
}
编辑:
otherClass 是一个参数/对象,类型为 SomeSubClass 或 SomeOtherSubClass 。
答案 0 :(得分:1)
如果我正确理解您的问题,您可以使用对象的Class
使用newInstance()
方法创建新的实例。
public SomeSuperClass someMethod(SomeSuperClass otherClass)
throws InstantiationException, IllegalAccessException {
return otherClass.getClass().newInstance();
}
以下是我工作的完整示例:
public abstract class SomeSuperClass {
public SomeSuperClass someMethod(SomeSuperClass otherClass) throws InstantiationException, IllegalAccessException {
return otherClass.getClass().newInstance();
}
public static void main(String[] args) {
SomeSubClass subClass = new SomeSubClass();
try {
SomeSuperClass newClass = subClass.someMethod(subClass);
System.out.println(newClass.getClass().getName());
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 1 :(得分:0)
public SomeSuperClass someMethod(SomeSuperClass otherClass) {
try {
return (SomeSuperClass)otherClass.getClass().getConstructor().newInstance();
}
catch (Exception e) {
}
return null;
}
这样的事情对你有用。