Das argument des Typs null sollte explizit umgewandelt werden, um die Klasse<?>[] für den Aufruf von varargs-Methode
Bitte haben Sie einen Blick auf das folgende Beispiel, der erste Anruf zu getMethod()
erzeugt eine Warnung in Eclipse. Die zweite funktioniert nicht und bricht mit einer NoSuchMethodException
.
Dem argument des Typs
null
sollte explizit umgewandelt werdenClass<?>[]
für den Aufruf von varargs-MethodegetMethod(String, Class<?>...)
vom TypClass<Example>
. Es könnte alternativ eine Umwandlung in der Klasse für eine varargs-Aufruf.
Ich folgte der Warnung und nichts funktionierte mehr.
import java.lang.reflect.Method;
public class Example
{
public void exampleMethod() { }
public static void main(String[] args) throws Throwable
{
Method defaultNull = Example.class.getMethod("exampleMethod", null);
Method castedNull = Example.class.getMethod("exampleMethod", (Class<?>) null);
}
}
Der zweite Aufruf erzeugt diese Fehlermeldung:
Exception in thread "main" java.lang.NoSuchMethodException:
Example.exampleMethod(null)
at java.lang.Class.getMethod(Class.java:1605)
at Example.main(Example.java:12)
Kann mir jemand erklären, dies Verhalten zu mir? Was ist der richtige Weg um die Warnung?
InformationsquelleAutor der Frage codevour | 2011-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der zweite parameter der
getMethod
Methode ist ein VarArg-argument.Die korrekte Verwendung ist :
Wenn reflektierte Methode hat keine parameter, dann wird kein zweiter parameter angegeben werden soll.
Wenn das reflektierte Methode hat parameter, so dass jeder parameter sollte angegeben werden, in der folgenden Weise:
UPDATE
So, in Ihrem Fall, wenn Sie angeben, dass
null
der compiler nicht weiß, welche Art tun Sie angeben. Wenn Sie versuchen, zu werfennull
zu einer Klasse ist unbekannt, aber ist sowieso eine Klasse, erhalten Sie eine Ausnahme, weil es keinepublic void exampleMethod(Class<?> object) { }
Signatur von exampleMethod.
InformationsquelleAutor der Antwort StKiller
Den getMethod definiert in java-API:
Wenn die Methode, die Sie genannt keine Argumente hat,dann sollte man liefern ein leeres array, oder ein array mit 0 die Länge für das zweite argument.wie diese:
Aufrufen der Methode sollten Sie auch ein leeres array.
InformationsquelleAutor der Antwort Alex.Lee
Sie hat nicht gewirkt
null
zuClass<?>[]
Sie warf es zuClass<?>
. Da keine Methode entspricht, die Signatur, es wirft die Ausnahme. Korrigieren Sie Ihre Stimmen, um richtig legen Sie das array.InformationsquelleAutor der Antwort Mike Yockey