Java 反射API中新类[0]的含义

Java 反射API中新类[0]的含义,java,class,reflection,Java,Class,Reflection,我看到一个声明: o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]); 有人能告诉我新类[0]和新对象[0]在这种情况下做什么吗,其中o1是任何对象 o1.getClass().getMethod(getter, new Class[0]) 这意味着它告诉我们找到一个名为getter的方法,它没有参数 和 o1.getClass().getMethod(getter, null) getM

我看到一个声明:

o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
有人能告诉我新类[0]和新对象[0]在这种情况下做什么吗,其中
o1
是任何
对象

o1.getClass().getMethod(getter, new Class[0])
这意味着它告诉我们找到一个名为
getter
的方法,它没有参数

o1.getClass().getMethod(getter, null)
getMethod()获取参数的类型列表。传递零长度数组意味着它没有参数。invoke()也是如此

从以下文件中:

如果parameterTypes为null,则将其视为空数组

从以下文件中:

如果基础方法所需的形式参数数为0,则提供的args数组的长度可能为0或null

那么,在该上下文中,您发布的行相当于:

o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);

就我个人而言,我发现
null
的使用更具可读性(尽管使用零长度数组确实有好处,可以自行记录程序员未传递的参数类型,如果这对您意义重大的话)。

+1而且它也相当于
o1=o1.getClass().getMethod(getter.invoke)(o1)现在已经添加了varargs。@PaulBellora再次感谢您修复了我的文档链接。我有一个根深蒂固的老习惯,就是在谷歌的所有Java搜索词前面加上“Java6”。(如此之多以至于它进入了非Java搜索,例如“Java 6辣椒配方”和“Java 6如何摆脱家蝇”。)哈,这让我的夜晚:D