com.sun.mirror cannot be resolved bzw. how 2 get methodNames

Status
Nicht offen für weitere Antworten.

norman

Top Contributor
Hallo zusammen,

ich versuche gerade die Methoden einer Klasse zu bekommen mit
Code:
java.util.Collection methods2 = com.sun.mirror.declaration.ClassDeclaration.getMethods();
aber eclipse schimpft "com.sun.mirror cannot be resolved".

Was ist überhaupt com.sun.mirror? Klingt ja nicht nach einem normalen package 😱/

Grüße
 
oder gibt es noch eine weiter möglichkeit, die Methoden einer Klasse rauszufinden? (Eigentlich brauche ich lediglich deren Namen)

PS: es sollen nur Methoden gefunden werden, die in der Klasse auch wirklich deklariert (?) werden, also keine geerbten oder sowas.

Norman
 
Das Mittle der Wahl wäre
Code:
java.lang.Class.getDeclaredMethods();

Bsp:

Code:
import java.lang.reflect.Method;

/* ... */

Method[] methods = String.class.getDeclaredMethods();
 
ahh *lichtaufgeh*
bin nur bis java.lang.Class.getMethods() gekommen und das brachte mich nicht weiter.

trotzdem:
was ist com.sun.mirror ... ?
 
und was ist der unterschied deiner lösung String.class ...
und
Code:
Method[] methods2 = this.getClass().getDeclaredMethods();
 
String.class sollte nur ein Beispiel sein; ich wusste ja bis eben nicht, von welcher Klassen Du die Methoden abfragen wolltest. Wenn Du in einer Instanzmethode einer Klasse die in ebendieser Klassen deklarierten Methoden abfragen willst, dann ist this.getClass().getDeclaredMethods() richtig.

Für getDeclaredMethods() brauchst Du nur ein Class-Objekt (also ein Instanz der Klasse java.lang.Class). Solche Objekte erzeugt man (hauptsächlich) auf eine der drei folgenden Arten:

1. Wenn man ein konkretes Objekt (eine Instanz einer Klasse) befrage will: java.lang.Object.getClass() (erben alle Klassen).
Bsp.:
Code:
Class c1 = this.getClass();
Class c2 = (new String()).getClass();
2. Wenn man kein konketes Objekt hat, der Klassenname aber schon zur Übersetzungszeit feststeht und die entsprechende Klasse schon zur Übersetzungszeit im Classpaht vorhanden ist: der .class-OPerator
Bsp:
Code:
Class c1 = my.test.package.MyClass.class;
Class c2 = String.class;
3. Wenn man kein konkretes Objekt hat und der Klassenname entweder zur Compile-Zeit nicht bekannt ist (weil er z.B. im Programm vom Benutzer eingegeben werden soll) oder aber die entsprechende Klasse zur Übersetzungszeit nicht unbedingt im Classpath ist: java.lang.Class.forName()
Bsp:
Code:
Class c1 = Class.forName( "my.test.package.MyClass");
Class c2 = Class.forName( "java.lang.String"); //--- "java.lang." ist hier notwendig!
 
norman hat gesagt.:
trotzdem:
was ist com.sun.mirror ... ?

com.sun.mirror.declaration.* sind Implementierungsdetails der Sun-JVM. Eine Anwendung sollte diese Klassen niemals direkt nutzen. Wie kommst Du überhaupt darauf? War das die Auto-Ververvollständigung von Eclipse? Die haut eben auch manchmal daneben...
 
Murray hat gesagt.:
com.sun.mirror.declaration.* sind Implementierungsdetails der Sun-JVM. Eine Anwendung sollte diese Klassen niemals direkt nutzen. Wie kommst Du überhaupt darauf? War das die Auto-Ververvollständigung von Eclipse? Die haut eben auch manchmal daneben...

nein, ich habe in der API com.sun.mirror.declaration.ClassDeclaration.getMethods() für mein Problem gefunden, bevor du mir die wohl bessere Lösung java.lang.Class.getDeclaredMethods(); vorgeschlagen hast.

Collection<MethodDeclaration> getMethods()
Returns the methods that are directly declared by this class or interface. Includes annotation type elements. Excludes implicitly declared methods of an interface, such as toString, that correspond to the methods of java.lang.Object.

Specified by:
getMethods in interface TypeDeclaration
Returns:
the methods that are directly declared, or an empty collection if there are none
See Also:
DeclarationFilter
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben