6

我看到了一个声明:

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

有人可以告诉我在这种情况下做什么new Class[0]和做什么,在哪里?new Object[0]o1Object

4

2 回答 2

5

getMethod() 采用参数类型列表。传递一个长度为零的数组意味着它没有参数。调用()也是如此。

从文档中Class.getMethod

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

从文档中Method.invoke

如果底层方法所需的形参数量为 0,则提供的 args 数组的长度可能为 0 或 null。

那么,在这种情况下,您发布的行相当于:

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

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

于 2013-08-08T04:01:53.557 回答
2
o1.getClass().getMethod(getter, new Class[0])

这意味着它告诉Class#getMethod找到一个没有参数的名为方法getter

它与

o1.getClass().getMethod(getter, null)
于 2013-08-08T03:59:07.387 回答