Parameternamen mit Reflection-API

Status
Nicht offen für weitere Antworten.

taouri

Aktives Mitglied
Hallo zusammen,

ich wusste nicht, wo das hier hingehört, deswegen habe ich es mal zu den allgemeinen Fragen gestellt.
Also, ich bin gerade dabei mit der Reflection-API von Java zu arbeiten. Das klappt an sich auch ganz gut aber eine Sache stört mich: Ich habe keine Ahnung, wie ich die Namen von Parametern herausbekommen kann. Auch im Sun-Tutorial habe ich nichts brauchbares gefunden. Muss ich auch noch den SourceCode analysieren? Soweit ich es aus der API erkennen kann, kann man nur den Typ eines Aufrufparameters bestimmen, nicht aber den Namen.
Mein Problem ist jetzt, dass ich ein Programm schreibe, das automatisch aus Klassen UMLs erzeugt. Und für ein UML-Diagramm wäre es schon sinnvoll zu wissen, wie der jeweilige Parameter denn heißt. Gibt es da irgendeine Möglichkeit?

Danke schon mal, Gruß

taouri
 
JavaDoc wird schließlich auch aus dem Sourcecode erstellt 😉

oder siehe auch AutoComplete von Eclipse wenn kein Quellcode/ JavaDoc vorhanden ist:

Session s = null; (Hibernate-Session)
s.createCriteria(Class arg0, String arg1);
 
SlaterB hat gesagt.:
oder siehe auch AutoComplete von Eclipse wenn kein Quellcode/ JavaDoc vorhanden ist:

Session s = null; (Hibernate-Session)
s.createCriteria(Class arg0, String arg1);
Das hat damit nichts zu tun. In Class-Datei können auch die Namen der Parameter (und lokalen Variablen)
abgespeichert werden (Debug-Info). Bei Code-Completion werden diese Informationen verwendet. Quellcode brauchst du nicht.
 
Danke für die schnellen Antworten.
Schade eigentlich... Ich dachte, da ja die Felder Namen haben, müssten auch die Namen der Parameter abrufbar sein aber nun ja. Das Ganze jetzt auch noch zusätzlich aus dem Quellcode rauszusuchen tu ich mir nicht an und ich nehme an, dass JavaDoc nicht so einfach abgerufen werden kann, da es ja soweit ich weiß keine Klasse ist, sondern eine simple exe-Datei. Außerdem kann ich nicht voraussetzen, dass der User Eclipse hat, womit auch diese Möglichkeit leider wegfällt.
Gibt es vielleicht noch andere Möglichkeiten?

Gruß

taouri
 
@tfa:
dass man die Debug-Info speichern kann ist ja ne interessante Sache,
dennoch wird das standardmäßig nicht gemacht (etwa wenn man externe Libraries einbindet),
und dass dann zwar Methodennamen gefunden werden aber keine Parameternamen ist doch genau das Thema, oder nicht?
 
Also in meinem Hibernate-Jar sind die Debuginfos drin. Ich habe eine funktionierende Code-Completion mit Parameternamen, trotz fehlender Quellen. Nur darauf bezog sich mein Einwurf.
Per Reflection kann man diese Debug-Infos natürlich nicht abfragen. Das ist richtig.
 
Aber warum können die Namen von globalen Variablen auch wenn sie nicht final oder static sind per Reflection abgefragt werden, die Parameternamen aber nicht?
 
Weil du den Namen brauchst, um die Variable (bzw. das Feld) adressieren zu können. Bei Parameternamen braucht man das nicht, da zählt nur der Typ und die Reihenfolge in der Parameterliste.
 
Aber wie kann dann der Code in der Methode funktionieren? Nehmen wir an ich habe eine Methode, die mit zwei Strings aufgerufen wird. Woher weiß jetzt meinetwegen eine concat-Funktion welcher String an erster und welcher an zweiter kommt. Ich meine irgendwie muss ja auch ein Parameter addressiert werden oder? Wird das dann einfach über 1.Parameter, 2.Paramter, usw. gemacht?
 
Ja, die Parameternamen sind ja nur lokal gültig, also innerhalb der Methode. Die können heißen wie sie wollen. Das ist völlig unwichtig.
 
UML aus class Dateien zu generieren halte ich für ungünstig. Nimm doch den Quellcode dafür wie all die anderen Tools auch.
 
Naja, mir gings halt darum, mich mal ein bisschen mit der Reflection-API zu beschäftigen. Und grundsätzlich bin ich mit dem Resultat eigenltich auch recht zufrieden. Und ehrlich gesagt habe ich keine Lust nur wegen ein paar Parameternamen noch einmal von vorne anzufangen und mich durch Quelldateien durchzuackern. Es wäre zwar ganz nett gewesen, die Namen auch noch drin zu haben, ist aber nicht zwingend nötig.
Aber auf jeden Fall vielen Dank für die schnellen Antworten.

Gruß

taouri
 
Wie du dir bereits denken kannst, gibt es fertige Parser für Java Quelltext die dir einen vollständigen AST liefern.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben