我正在尝试这样做
MyBean2 bean2 = MyBean.createBeanFrom();
注意:这与the other question完全不同,因为这与静态方法有关。
有没有办法在运行时确定实际的返回类型类? 到目前为止,我的研究表明这是不可能的。 (“擦除”和“桥接方法”问题)。但是我不放弃,做上述事情会很酷。请提供 a)解决方案是否可行 b)如果不可能回答/想到为什么不存在这种能力 c)为什么拥有这种能力没有意义
public class MyBean2 extends MyBean {}
public class MyBean3 extends MyBean {}
public class MyBean {
void tryingToDoThis() {
MyBean2 bean2 = MyBean.<MyBean2>createBeanFrom();
MyBean3 bean3 = MyBean.<MyBean3>createBeanFrom();
}
public static <T> T createBeanFrom() {
Class c = null;
MyBean newBean = null;
try {
Method m = MyBean.class.getMethod("createBeanFrom", new Class[] {});
java.lang.reflect.Type t = m.getGenericReturnType();
//c = ??;//How to determine this at runtime ?
newBean = (MyBean) c.newInstance();
newBean.init();//something
} catch (Exception e) {
e.printStackTrace();
}
return (T) newBean;
}
void init(){}
}
尝试了generic return type以及Google Guava的其他变体,但没有运气。
Object o = new TypeToken<A>() {}.resolveType(
EntityAccessTransformer.class.getMethod("createFrom", null).getGenericReturnType());
也试过这个
TypeToken tt = TypeToken.of( m.getGenericReturnType());
但没有运气。