Reflection API中新类[0]的含义

时间:2013-08-08 03:56:04

标签: java class reflection

我发现了一个声明:

o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);

有人可以告诉我new Class[0]new Object[0]在这种情况下做了什么,其中o1Object吗?

2 个答案:

答案 0 :(得分:4)

getMethod()获取参数的类型列表。传递零长度数组意味着它没有参数。对于invoke()也一样。

来自Class.getMethod的文档:

  

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

来自Method.invoke的文档:

  

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

在此上下文中,您发布的行等同于:

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

我个人认为null的使用更具可读性(尽管使用零长度数组确实有自行记录程序员未传递的参数类型的好处,如果是对你来说意义重大。)

答案 1 :(得分:2)

o1.getClass().getMethod(getter, new Class[0])

这意味着它会告诉Class#getMethod找到名为getter的方法,该方法具有 NO 参数。

相同
o1.getClass().getMethod(getter, null)