Как сказать, что метод имеет varargs аргумент с помощью отражения?

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

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[])

Таким образом, подпись метода, как сообщают, берет массив Строки.

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

7
задан Anthony Kong 15 June 2010 в 01:40
поделиться

2 ответа

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

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

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

20
ответ дан 6 December 2019 в 08:41
поделиться

на самом деле нет никакой разницы

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

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

1
ответ дан 6 December 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: