这是班级:
public class Foo {
public void bar(Integer[] b) {
}
}
现在我正试图通过反思来获得这个方法:
Class cls = Foo.class;
Class[] types = { /* what is here */ };
cls.getMethod("bar", types);
如何创建此“类型”?
答案 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给出的答案。