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]做什么,哪里o1有Object?
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 更具可读性(尽管使用零长度数组确实具有自我记录程序员未传递的参数类型的好处,如果这对您意义重大的话)。