Java:通过对泛型类型的反射来调用特定方法

时间:2011-03-04 18:32:08

标签: java generics reflection

如何在泛型类型上调用特定方法?我想调用一个getter / setter方法。

编辑:例如:

class BurningSun<T>
{ 
    public void kitchenSink()
    {
        Class c = Class.forName(/*What to put here for <T> ?*/)
                /*
                Reflections code
                */
    }
}

嗯,那么bean的getter方法如何在各种框架中调用和设置?

2 个答案:

答案 0 :(得分:3)

在泛型类型中,如果没有人告诉你,就无法在运行时获取type参数的名称。

在运行时,BurningSun<String>BurningSun<Integer>完全等效,您甚至可以将其中一个投射到另一个中(但这不是类型安全的。)

所以,通常如果你真的需要你的泛型对象中的type参数的类对象,你可以让别人在构造函数中给你。

class BurningSun<T> {


    private Class<T> paramClass;

    public BurningSun(Class<T> pClass) {
        this.paramClass = pClass;
    }

    public void kitchenSink() {
        T t = paramClass.newInstance();
    }
}

(你需要在这里捕捉或声明一些例外。)

答案 1 :(得分:2)

基于反射的所有方法调用都是将对象推送到方法中最简单,祈祷它可行。所以施放&amp;保持手指交叉。