如何判断一个方法是否有使用反射的可变参数?

这是一个示例代码

package org.example;

import java.lang.reflect.Method;

class TestRef {

        public void testA(String ... a) {
                for (String i : a) {
                        System.out.println(i);
                }
        }

        public static void main(String[] args){

                Class testRefClass = TestRef.class;

                for (Method m: testRefClass.getMethods()) {
                        if (m.getName() == "testA") {
                                System.out.println(m);
                        }
                }
        }
}

输出是

public void org.example.TestRef.testA(java.lang.String[])

因此,该方法的签名被报告为一个String数组。

反射库中是否有任何意思我可以说这个方法最初被声明为可变参数?


反射库中是否有任何意思我可以说这个方法最初被声明为可变参数?

对。 java.lang.reflect.Method.isVarArgs()

但是,如果您试图以人类可读形式组装和显示方法签名,则这仅适用。 如果您需要使用反射调用varargs方法,则必须将可变参数参数组装为数组类型的参数。


真的没有区别

static public void main(String[]  args)
static public void main(String... args)

实际上,在Java中添加可变参数的过程中,引入了非常晚的符号。 詹姆斯高斯林提出这个建议,他认为这是可靠的。 在此之前,相同的[]表示可变参数。

链接地址: http://www.djcxy.com/p/50193.html

上一篇: How to tell a method has a varargs argument using reflection?

下一篇: What if there was no future.isDone check in the invokeAll method