我发现了一个声明:
o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);
有人可以告诉我new Class[0]
和new Object[0]
在这种情况下做了什么,其中o1
是Object
吗?
答案 0 :(得分:4)
getMethod()获取参数的类型列表。传递零长度数组意味着它没有参数。对于invoke()也一样。
来自Class.getMethod
的文档:
如果parameterTypes为null,则将其视为空数组。
来自Method.invoke
的文档:
如果基础方法所需的形式参数的数量为0,则提供的args数组的长度可以为0或null。
在此上下文中,您发布的行等同于:
o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);
我个人认为null
的使用更具可读性(尽管使用零长度数组确实有自行记录程序员未传递的参数类型的好处,如果是对你来说意义重大。)
答案 1 :(得分:2)
o1.getClass().getMethod(getter, new Class[0])
这意味着它会告诉Class#getMethod找到名为getter
的方法,该方法具有 NO 参数。
与
相同o1.getClass().getMethod(getter, null)