Вот пример кода
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?
Есть ли в библиотеке отражения какой-нибудь способ узнать, что метод изначально объявлен как принимающий varargs?
Да. java.lang.reflect.Method.isVarArgs()
Однако это полезно только в том случае, если вы пытаетесь собрать и отобразить сигнатуры методов в удобочитаемой форме. Если вам нужно вызвать метод varargs с помощью reflection, вам придется собрать аргументы varargs в аргумент, типизированный для массива.
на самом деле нет никакой разницы
static public void main(String[] args)
static public void main(String... args)
на самом деле ... нотация была введена очень поздно в процессе добавления vararg в java. Его предложил Джеймс Гослинг, он считает, что так симпатичнее. До этого тот же [] обозначал vararg.