Java 如何通过反射获取此方法对象?
这是一节课:Java 如何通过反射获取此方法对象?,java,reflection,Java,Reflection,这是一节课: public class Foo { public void bar(Integer[] b) { } } 现在,我尝试通过反射获得此方法: Class cls = Foo.class; Class[] types = { /* what is here */ }; cls.getMethod("bar", types); 如何创建这个“类型” 废话废话废话废话 诸如此类诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的
public class Foo {
public void bar(Integer[] b) {
}
}
现在,我尝试通过反射获得此方法:
Class cls = Foo.class;
Class[] types = { /* what is here */ };
cls.getMethod("bar", types);
如何创建这个“类型”
废话废话废话废话
诸如此类诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类的诸如此类。如果您动态地需要它,可以使用
Class.forName(“[Ljava.lang.Integer;”)
,如David所述
如果不知道确切的类型,可以调用getMethods()
,迭代返回的数组并比较名称
Spring有一个实用程序类
ReflectionUtils
,它有findMethod(..)
来实现这一点。Integer[].class
-这是整数数组的类文本。如David所述,如果动态需要,可以使用class.forName([Ljava.lang.Integer;”)
如果不知道确切的类型,可以调用getMethods()
,迭代返回的数组并比较名称
Spring有一个实用程序类
ReflectionUtils
,它有findMethod(..)
来实现这一点。有点愚蠢,class
没有方法给出相应的数组类,只有另一种方法。这里有一个解决方法:
<E> public static Class<E[]> arrayClass(Class<E> elementClass) {
@SuppressWarnings("unchecked")
Class<E[]> arrayClass = (Class<E[]>) Array.newInstance(elementClass, 0).getClass();
return arrayClass;
}
当然,如果可以编写
Integer.class
,也可以编写Integer[].class
。因此,只有当您知道您的方法将某个类的数组作为类对象时,这才有用,否则请使用Bozho给出的答案。有点愚蠢,class
没有方法给出相应的数组类,只有相反的方法。这里有一个解决方法:
<E> public static Class<E[]> arrayClass(Class<E> elementClass) {
@SuppressWarnings("unchecked")
Class<E[]> arrayClass = (Class<E[]>) Array.newInstance(elementClass, 0).getClass();
return arrayClass;
}
当然,如果你可以写
Integer.class
,你也可以写Integer[].class
。因此,只有当你知道你的方法将某个类的数组作为类对象时,这才有用,否则就使用Bozho给出的答案。我能得到这个Integer[].class
没有显式静态调用?假设我有className=“Integer[]”
。@yegor256-这应该可以做到,从:“[Ljava.lang.Integer;”
@yegor256@David Harkness是正确的,将它添加到答案中。我可以得到这个Integer[].class
没有显式静态调用?假设我有className=“Integer[]”
。@yegor256-这应该可以做到,从:“[Ljava.lang.Integer;”
@yegor256@David Harkness是正确的,将它添加到答案中。
Class cls = Foo.class;
Class[] types = { arrayClass(Integer.class) };
cls.getMethod("bar", types);