我看到了一个声明:
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
有人可以告诉我在这种情况下做什么new Class[0]
和做什么,在哪里?new Object[0]
o1
Object
我看到了一个声明:
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
有人可以告诉我在这种情况下做什么new Class[0]
和做什么,在哪里?new Object[0]
o1
Object
getMethod() 采用参数类型列表。传递一个长度为零的数组意味着它没有参数。调用()也是如此。
从文档中Class.getMethod
:
如果 parameterTypes 为 null,则将其视为空数组。
从文档中Method.invoke
:
如果底层方法所需的形参数量为 0,则提供的 args 数组的长度可能为 0 或 null。
那么,在这种情况下,您发布的行相当于:
o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);
就我个人而言,我发现使用null
there 更具可读性(尽管使用零长度数组确实具有自我记录程序员未传递的参数类型的好处,如果这对您来说意义重大的话)。
o1.getClass().getMethod(getter, new Class[0])
这意味着它告诉Class#getMethod找到一个没有参数的名为的方法getter
。
它与
o1.getClass().getMethod(getter, null)