有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反射API中新类[0]的java含义

我看到一个声明:

o1 = o1.getClass().getMethod(getter, new Class[0]).invoke(o1, new Object[0]);

有人能告诉我new Class[0]new Object[0]在这种情况下做什么吗o1是什么Object


共 (2) 个答案

  1. # 1 楼答案

    getMethod()获取参数的类型列表。传递零长度数组意味着它没有参数。invoke()也是如此

    ^{}的文档中:

    If parameterTypes is null, it is treated as if it were an empty array.

    ^{}的文档中:

    If the number of formal parameters required by the underlying method is 0, the supplied args array may be of length 0 or null.

    那么,在该上下文中,您发布的行相当于:

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

    就我个人而言,我发现使用null更具可读性(尽管使用零长度数组确实有自记录程序员未传递的参数类型的好处,如果这对您意义重大的话)

  2. # 2 楼答案

    o1.getClass().getMethod(getter, new Class[0])
    

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

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