【问题标题】:Meaning of new Class[0] in Reflection API反射 API 中 new Class[0] 的含义
【发布时间】: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


    【解决方案1】:

    getMethod() 采用参数类型列表。传递一个长度为零的数组意味着它没有参数。调用()也是如此。

    来自Class.getMethod 的文档:

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

    来自Method.invoke的文档:

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

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

    o1 = o1.getClass().getMethod(getter, null).invoke(o1, null);
    

    我个人认为null 的使用更具可读性(尽管使用零长度数组确实具有自我记录程序员未传递的参数类型的好处,如果这意味着很多给你)。

    【讨论】:

    • +1 并且它也等同于 o1 = o1.getClass().getMethod(getter).invoke(o1); 现在添加了可变参数。
    • @PaulBellora 再次感谢您修复我的文档链接。我有一个古老的、根深蒂固的习惯,即在 Google 中将所有 Java 搜索词都以“java 6”开头。 (以至于它进入了非 Java 搜索,例如“java 6 chili recipe”和“java 6 how to get rid of house flies”。)
    • 哈,这让我度过了一个美好的夜晚:D
    【解决方案2】:
    o1.getClass().getMethod(getter, new Class[0])
    

    这意味着它告诉Class#getMethod 找到一个名为getter 的方法,该方法具有NO 参数。

    一样
    o1.getClass().getMethod(getter, null)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多