Erhalte ich die parameter der Methode den Namen mit Hilfe der Java reflection?
Wenn ich eine Klasse wie folgt aus:
public class Whatever
{
public void aMethod(int aParam);
}
gibt es eine Möglichkeit zu wissen, dass aMethod
verwendet einen parameter namens aParam
, das ist der Typ int
?
7 Antworten und keiner erwähnt den Begriff "Methodensignatur". Dies ist im Grunde, was Sie können introspect mit Reflexion, was bedeutet: keine parameter-Namen.
es ist möglich, siehe meine Antwort unten
6 Jahre später, ist es nun möglich, über die Reflexion in der Java 8 finden Sie unter ALSO Antwort
Möglich, Duplikat der gibt es eine Möglichkeit zu Holen Sie sich die Namen der Parameter der Methode in Java?
es ist möglich, siehe meine Antwort unten
6 Jahre später, ist es nun möglich, über die Reflexion in der Java 8 finden Sie unter ALSO Antwort
Möglich, Duplikat der gibt es eine Möglichkeit zu Holen Sie sich die Namen der Parameter der Methode in Java?
InformationsquelleAutor Geo | 2010-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusammenfassen:
method.getParameterTypes()
Für schreiben AutoVervollständigen-Funktionalität für einen editor (wie gesagt in einem der Kommentare) gibt es ein paar Optionen:
arg0
,arg1
,arg2
etc.intParam
,stringParam
,objectTypeParam
usw.waren Sie in der Lage, einen Weg zu finden, zu bekommen, Schnittstelle, parameter-Namen ?
Nur, um hinzuzufügen, dass ist der Grund, warum der Frühling braucht @ConstructorProperties-Anmerkung für die un-zweideutig erstellen Objekt aus primitiven Typen.
InformationsquelleAutor Bozho
In Java 8 können Sie Folgendes tun:
Also für Ihre Klasse
Whatever
können wir tun, ein manueller test:dem drucken sollten
[aParam]
wenn Sie bestanden haben-parameters
argument, um Ihre Java-8-compiler.Für Maven Nutzer:
Weitere Informationen finden Sie unter folgenden links:
Das wird nicht funktionieren, wenn Methoden sind überladen.
InformationsquelleAutor lpandzic
Den Paranamer Bibliothek wurde geschaffen, um zu lösen dieses problem.
Es wird versucht zu bestimmen, Methode Namen in ein paar verschiedene Möglichkeiten. Wenn die Klasse kompiliert wurde debugging kann das extrahieren der Informationen durch das Lesen der bytecode der Klasse.
Anderen Weg ist es zu injizieren einer privaten statischen member in den bytecode der Klasse, nachdem es kompiliert wurde, aber bevor es in ein Glas. Es verwendet dann die Reflexion, diese Informationen zu extrahieren, die von der Klasse zur Laufzeit.
https://github.com/paul-hammant/paranamer
Hatte ich Probleme, die diese Bibliothek nutzen, aber ich habe es in der Ende. Ich bin der Hoffnung, um die Probleme zu melden, um die Betreuer.
ParameterNAmesNotFoundException
InformationsquelleAutor Sarel Botha
Ja.
Code kompiliert werden muss mit Java 8 kompatibel compiler mit der option zum speichern von formalen Parameternamen eingeschaltet (-Parameter option).
Dann dieser code sollte funktionieren:
InformationsquelleAutor Karol Król
siehe org.springframework.core.DefaultParameterNameDiscoverer Klasse
InformationsquelleAutor Denis Danilkovich
Können Sie abrufen, die Methode mit der Reflexion und erkennen, es ist argument-Typen. Überprüfen Sie http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Method.html#getParameterTypes%28%29
Jedoch, Sie können nicht sagen, der name des Arguments verwendet.
Und ich zitiere: "man kann Allerdings nicht sagen, der name des Arguments verwendet." Lesen Sie einfach meine Antwort -_-
Die Frage war nicht so formuliert, dass die Art, wie er nicht wusste, über den Erhalt der Typ.
InformationsquelleAutor Johnco
Es möglich ist, und Spring MVC 3 funktioniert es, aber ich habe nicht die Zeit nehmen, um zu sehen, wie genau.
Stammt aus der spring-Dokumentation
InformationsquelleAutor flybywire
Zwar ist es nicht möglich (wie bereits dargestellt), Sie könnte Verwendung einer annotation zu führen über die parameter name, und erhalten, dass, obwohl die Reflexion.
Nicht die sauberste Lösung, aber es bekommt den job getan. Einige webservices, tatsächlich tun dies, um die Namen der parameter (sprich: der Bereitstellung von WSs mit glassfish).
InformationsquelleAutor WhyNotHugo
Sehen java.Bohnen.ConstructorProperties, es ist eine Anmerkung, konzipiert für genau diese.
InformationsquelleAutor Markus Jevring
So dass Sie sollten in der Lage sein zu tun:
Aber Sie werden wahrscheinlich erhalten eine Liste, etwa so:
Ich glaube, das wird behoben, in Groovy 2.5+
Also aktuell die Antwort ist:
Siehe auch:
Für jede Methode, dann so etwas wie:
aMethod
. Ich will es für alle Methoden in einer Klasse.Hinzugefügt ein Beispiel zu bekommen, jeden nicht-synthetischen Methode
Cant verwenden wir
antlr
zu get-parameter die Namen für diese?InformationsquelleAutor tim_yates
wenn Sie mithilfe des eclipse finden Sie unter dem unten Bild, damit der compiler speichern die Informationen über die Parameter der Methode
InformationsquelleAutor Hazim
Werden die Namen der Parameter sind nur nützlich, um den compiler. Wenn der compiler erzeugt eine class-Datei, die Namen der parameter sind nicht im Lieferumfang enthalten - eine Methode, die Argumentliste nur aus der Anzahl und den Typen Ihrer Argumente. So würde es unmöglich sein, die zum abrufen der parameter name mit Reflexion (als tagged in deiner Frage) - es existiert nicht überall.
Jedoch, wenn die Verwendung der Reflexion ist nicht eine harte Anforderung, können Sie diese Informationen abrufen direkt aus dem source-code (sofern Sie es haben).
Tut mir Leid Sie missverstanden meine Antwort ganz. Bitte Lesen Sie ihn in den Kontext der Frage.
Erwerb der Namen der Parameter ist ein großer Vorteil für den Aufruf dieser Methode reflektiert. Es ist nicht nur nützlich, um den compiler, auch im Kontext der Frage.
InformationsquelleAutor danben
Hinzufügen meine 2 Cent; parameter info ist erhältlich in einer Klasse-Datei "Debuggen", wenn Sie javac -g kompiliert die Quelle. Und es ist für APT, sondern Sie brauchen eine Anmerkung, damit keine Verwendung für Sie. (Jemand diskutiert etwas ähnliches vor 4 bis 5 Jahren hier: http://forums.java.net/jive/thread.jspa?messageID=13467&tstart=0 )
Insgesamt-kurz-Sie können es nicht erhalten, es sei denn, Sie arbeiten mit Quellcode-Dateien direkt (ähnlich wie APT funktioniert zur compile-Zeit).
InformationsquelleAutor Elister
Als @Bozho erwähnt, ist es möglich, es zu tun, wenn debug-Informationen enthalten, die während der Kompilierung.
Es gibt eine gute Antwort hier...
Wie man die Namen der parameter eines Objekts Konstruktoren (Reflexion)? durch
@AdamPaynter
...mit der ASM-Bibliothek. Ich habe ein Beispiel zeigt, wie Sie Ihr Ziel erreichen.
Starten Sie als erstes mit einem pom.xml mit diesen Abhängigkeiten.
Dann, diese Klasse soll das tun, was Sie wollen. Einfach aufrufen der statischen Methode
getParameterNames()
.Hier ist ein Beispiel mit einem unit-test.
Können Sie finden das vollständige Beispiel auf GitHub
Vorsichtsmaßnahmen
static
Methoden. Dies ist, weil in diesem Fall die Anzahl der Argumente zurück durch ASM ist anders, aber es ist etwas, das leicht behoben werden können.InformationsquelleAutor danidemi