反射 API 中 new Class[0] 的含义

use*_*538 6 java reflection class

我看到一个声明:

o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*n C 5

getMethod() 接受参数类型列表。传递零长度数组意味着它没有参数。invoke() 也一样。

从文档中Class.getMethod

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

从文档中Method.invoke

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

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

o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);
Run Code Online (Sandbox Code Playgroud)

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

  • +1 并且它也等效于 `o1 = o1.getClass().getMethod(getter).invoke(o1);` 现在添加了可变参数。 (3认同)