Here is a sample code
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);
}
}
}
}
The output is
public void org.example.TestRef.testA(java.lang.String[])
So the signature of the method is reported to take a array of String.
Is there any mean in the reflection library I can tell that the method is originally declared to take a varargs?
Is there any mean in the reflection library I can tell that the method is originally declared to take a varargs?
Yup. java.lang.reflect.Method.isVarArgs()
.
However, this is only of use if you are trying to assemble and display method signatures in human readable form. If you need to invoke a varargs method using reflection, you will have to assemble the varargs arguments into an array-typed argument.
there is really no difference
static public void main(String[] args)
static public void main(String... args)
actually the ... notation was introduced very late in the process of adding vararg in java. James Gosling proposed it, he thinks it's cuter. Before that, the same [] denotes the vararg.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With