Как узнать, что метод имеет аргумент varargs, использующий отражение? - PullRequest
7 голосов
/ 15 июня 2010

Вот пример кода

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.

Есть ли какое-либо средство в библиотеке отражений, которое я могу сказать, что метод изначально объявлен как принимающий переменные?

Ответы [ 2 ]

20 голосов
/ 15 июня 2010

Есть ли какое-либо значение в библиотеке отражений, которое я могу сказать, что метод первоначально объявлен как varargs?

Да.java.lang.reflect.Method.isVarArgs().

Однако это полезно только в том случае, если вы пытаетесь собрать и отобразить сигнатуры методов в удобочитаемой для человека форме.Если вам нужно вызвать метод varargs с помощью отражения, вам придется собрать аргументы varargs в аргумент с типом массива.

1 голос
/ 15 июня 2010

разницы действительно нет

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

на самом деле нотация ... была введена очень поздно в процессе добавления vararg в Java. Джеймс Гослинг предложил это, он думает, что это симпатичнее. До этого то же [] обозначает vararg.

...