【发布时间】:2013-08-08 03:56:03
【问题描述】:
我看到了一个声明:
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
谁能告诉我new Class[0] 和new Object[0] 在这种情况下做什么,其中o1 是任何Object?
【问题讨论】:
标签: java class reflection
我看到了一个声明:
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
谁能告诉我new Class[0] 和new Object[0] 在这种情况下做什么,其中o1 是任何Object?
【问题讨论】:
标签: java class reflection
getMethod() 采用参数类型列表。传递一个长度为零的数组意味着它没有参数。调用()也是如此。
来自Class.getMethod 的文档:
如果 parameterTypes 为 null,则将其视为空数组。
来自Method.invoke的文档:
如果底层方法所需的形参数量为 0,则提供的 args 数组的长度可能为 0 或 null。
那么,在这种情况下,您发布的行相当于:
o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);
我个人认为null 的使用更具可读性(尽管使用零长度数组确实具有自我记录程序员未传递的参数类型的好处,如果这意味着很多给你)。
【讨论】:
o1 = o1.getClass().getMethod(getter).invoke(o1); 现在添加了可变参数。
o1.getClass().getMethod(getter, new Class[0])
这意味着它告诉Class#getMethod 找到一个名为getter 的方法,该方法具有NO 参数。
和
一样o1.getClass().getMethod(getter, null)
【讨论】: