如何通过反射获取此Method对象?

时间:2011-02-21 19:48:34

标签: java reflection

这是班级:

public class Foo {
  public void bar(Integer[] b) {
  }
}

现在我正试图通过反思来获得这个方法:

Class cls = Foo.class;
Class[] types = { /* what is here */ };
cls.getMethod("bar", types);

如何创建此“类型”?

3 个答案:

答案 0 :(得分:3)

Integer[].class - 这是整数数组的类文字。如果您需要动态,则可以使用大卫指出的Class.forName("[Ljava.lang.Integer;")

如果您不知道确切的类型,可以调用getMethods(),迭代返回的数组并比较名称。

Spring有一个实用工具类ReflectionUtils,它有findMethod(..)来执行此操作。

答案 1 :(得分:1)

Integer[].class
blah blah blah blah blah blah blah

答案 2 :(得分:0)

Class没有方法可以提供相应的数组类,只是相反,这有点愚蠢。这是一个解决方法:

<E> public static Class<E[]> arrayClass(Class<E> elementClass) {
    @SuppressWarnings("unchecked")
    Class<E[]> arrayClass = (Class<E[]>) Array.newInstance(elementClass, 0).getClass();
    return arrayClass;
}

使用这种方法你可以写

Class cls = Foo.class;
Class[] types = { arrayClass(Integer.class) };
cls.getMethod("bar", types);

当然,如果你可以写Integer.class,你也可以写Integer[].class。所以这只有在您知道您的方法采用某些类的数组时才有用,您只能将其作为类对象获取,否则请使用Bozho给出的答案。