如何在Java中获取泛型静态方法的实际返回类型

时间:2015-05-07 18:55:57

标签: java generics reflection static-methods

我正在尝试这样做

  

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());

但没有运气。

0 个答案:

没有答案