我有2个Java类(Child1.java and Child2.java)
,它们是从公共类(Parent.java)
扩展而来的。我还有另一个公共类(Common.java)
,可以从两个Child类中调用它们。我从Thread.currentThread().getStackTrace()
获取呼叫者类名称,并通过Java Reflection
创建Class实例。然后,我从该类创建一个新的实例对象。因此,该方法的返回类型为Object
尽管我目前正在返回一个对象,但我需要以一种应动态返回被调用的类new实例的方式编写commonMethod()
。
public class Child1 extends Parent {
public void method1()
{
new Common().commonMethod();
}
}
public class Child2 extends Parent {
public void method2()
{
new Common().commonMethod();
}
}
public Object commonMethod() throws ClassNotFoundException, InstantiationException, IllegalAccessException
{
String className = Thread.currentThread().getStackTrace()[2].getClassName();
Class clazz = Class.forName(className);
return clazz.newInstance();
}
任何帮助将不胜感激
答案 0 :(得分:0)
尝试一下:
public Parent commonMethod() {
// blah blah..
}
public class Child1 extends Parent {
public void method1()
{
new Common() {
@Override
public Child1 commonMethod() {
return new Child1();
}
}.commonMethod();
}
}
public class Child2 extends Parent {
public void method2()
{
new Common() {
@Override
public Child2 commonMethod() {
return new Child2();
}
}.commonMethod();
}
}
您的结构不好。
但是我认为有一个原因。
祝你好运。
答案 1 :(得分:0)
这是您想要的吗?
public <T extends Object>T commonMethod() throws ClassNotFoundException, InstantiationException,
IllegalAccessException
{
String className = Thread.currentThread().getStackTrace()[2].getClassName();
Class clazz = Class.forName(className);
return (T) clazz.newInstance();
}