Type herausfinden

DerSchokoBär

Aktives Mitglied
Hallo zusammen,

und zwar muss ich eine Liste (dabei spielt es in diesem Fall keine Rolle, ob es sich um eine EList oder ArrayList handelt) mit Typen weitergeben. Nur ist die Frage wie ich diese Typen ausfragen und an die Liste weitergeben kann. Irgendwie muss es mit dem
Java:
((ParameterizedType) type).getActualTypeArguments()[0];
funktionieren


Java:
public EList<Type> methodenParameterAusgeben(Class c) throws ClassNotFoundException {
			
		EList<Type> methodenParameterList = new BasicEList<Type>();
		Method[] m = c.getDeclaredMethods();
		Class[] paratypes;
		
		for (Method method : m) {

			paratypes = method.getParameterTypes();

			if(paratypes.length > 0) {
				for (Class paratype : paratypes) {
					methodenParameterList.add(); // ???
				}
			} else
				methodenParameterList.add(null);
		}
		return methodenParameterList;
	}

Danke schon im Voraus :)
 

DerSchokoBär

Aktives Mitglied
Erstmal danke.
Naja aber mit
Java:
...
    		methodenParameterList.add(paratype.getName());
...
bekomme ich die Typen als String. Ich kann sie dann eben nur nicht einfach als Type casten.
 

DerSchokoBär

Aktives Mitglied
Als Class casten? Funktioniert auch nicht.
Code:
(Type)paratype.getName().getClass()
funktioniert ebenfalls nicht.
EDIT richtigerweise:
Code:
(Type)paratype.getClass()

Wie gesagt hatte auf eine solche Lösung spekuliert:
Code:
((ParameterizedType) type).getActualTypeArguments()[0];
generics - How to get type parameter values using java reflection? - Stack Overflow
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ist 'Type' dort selbst wieder ein Typparameter? Poste mal ein KSKB (wobei das zweite K durch eine Zeile verletzt werden kann ;) )
 

DerSchokoBär

Aktives Mitglied
Stimmt, bei Class ist etwas dabei, aber das dumme ist, dass ich eine EList (EList (EMF Javadoc)) benötige (Ich weiß das Thema gehört dann wieder zu "Plattformprogrammierung"), d.h. ich bekomme Probleme beim Casten:

Java:
	@SuppressWarnings("unchecked")
	public EList<org.eclipse.uml2.uml.Type> methodenParameterAusgeben(Class c) throws ClassNotFoundException {
			
		EList<org.eclipse.uml2.uml.Type> methodenParameterList = new BasicEList<org.eclipse.uml2.uml.Type>();
		Method[] m = c.getDeclaredMethods();
		Class[] paratypes;
		
		for (Method method : m) {
		
			//mod = method.getModifiers();
			paratypes = method.getParameterTypes();

			if(paratypes.length > 0) {
				for (Class paratype : paratypes) {
					methodenParameterList.add((Type) paratype.getClass().getGenericSuperclass()); // mit "Type" wird dieses Package eingebunden: org.eclipse.uml2.uml.Type 
				}
			} else
				methodenParameterList.add(null);
		}
		return methodenParameterList;
	}
Fehlermeldung:
Code:
java.lang.ClassCastException: java.lang.Class incompatible with org.eclipse.uml2.uml.Type

auch mit der zweiten Möglichkeit funktioniert es nicht:

Java:
	@SuppressWarnings("unchecked")
	public EList<org.eclipse.uml2.uml.Type> methodenParameterAusgeben(Class c) throws ClassNotFoundException {
			
		EList<org.eclipse.uml2.uml.Type> methodenParameterList = new BasicEList<org.eclipse.uml2.uml.Type>();
		Method[] m = c.getDeclaredMethods();
		Class[] paratypes;
		
		for (Method method : m) {
		
			//mod = method.getModifiers();
			paratypes = method.getParameterTypes();

			if(paratypes.length > 0) {
				for (Class paratype : paratypes) {

					ParameterizedType type = (ParameterizedType)paratype.getClass().getGenericSuperclass();
					org.eclipse.uml2.uml.Type UMLType = (Type) type; // hier fehlt noch das hinzufügen in die Liste
				}
			} else
				methodenParameterList.add(null);
		}
		return methodenParameterList;
	}

Fehlermeldung:
Code:
java.lang.ClassCastException: java.lang.Class incompatible with java.lang.reflect.ParameterizedType

Irgendwie müsste ich zu dem org.eclipse.uml2.uml.Type casten können.
 

Michael...

Top Contributor
Nur mal so als Einwurf ohne mich mit der eigentlichen Fragestellung befasst zu haben:
Method#getParameterTypes liefert ein Array von Class Objekten. Und zwar die Klassen der Parameter die an die Methode übergeben werden (müssen).
Es handelt sich um Class Objekte. Das kann u.U. die Klasse Type oder EList sein, aber niemals um ein Objekt vom Typ EList, daher ist ein casten in ein solches Objekt nicht möglich - weil es eben nur ein Class Objekt ist (sorry wenn ich mich wiederhole, will nur sicher gehen)
 

DerSchokoBär

Aktives Mitglied
Method#getParameterTypes liefert ein Array von Class Objekten. Und zwar die Klassen der Parameter die an die Methode übergeben werden (müssen).
Und an dieser Stelle will ich den Type haben.

Es handelt sich um Class Objekte. Das kann u.U. die Klasse Type oder EList sein, aber niemals um ein Objekt vom Typ EList, daher ist ein casten in ein solches Objekt nicht möglich - weil es eben nur ein Class Objekt ist (sorry wenn ich mich wiederhole, will nur sicher gehen)
Ich weiß nicht, ob wir aneinder vorbei kommunizieren oder ich es einfach nicht verstehe, aber es ja egal, welcher Typ es ist. Dieser Typ muss dann eben in die EList<Type> hinzugefügt werden. Das Problem ist nur, dass EList<Type> einen org.eclipse.uml2.uml.Type erwartet.
 

Michael...

Top Contributor
Ich weiß nicht, ob wir aneinder vorbei kommunizieren
Denke das passt schon.
egal, welcher Typ es ist. Dieser Typ muss dann eben in die EList<Type> hinzugefügt werden.
Heisst die List erwartet Objekte von Typ
Code:
Type
. Method#getParameterTypes() liefert Objekte von Typ
Code:
Class
. Wenn ich es jetzt richtig verstanden habe ist die Problemstellung, wie man auf Basis des Class Objekts oder dessen Attribute ein Objekt
Code:
Type
erzeugen kann, denn casten kann man ja nicht.
Da kann ich allerdings nicht viel dazu beitragen, denn die Lösung muss ja irgendwo in org.eclipse.uml2 - evtl. in der Klasse Type selbst - liegen und damit hatte ich noch nie zu tun.
 

DerSchokoBär

Aktives Mitglied
Heisst die List erwartet Objekte von Typ
Code:
org.eclipse.uml2.uml.Type
.
Also die List erwartet Objekte von Typ
Code:
org.eclipse.uml2.uml.Type
.

Method#getParameterTypes() liefert Objekte von Typ
Code:
Class
.
genau und paratypes iteriert mit paratype:
Java:
paratypes = method.getParameterTypes();
paratype.getClass().getGenericSuperclass();
liefert mit
Code:
.getGenericSuperclass()
einen Typ, ich denke einen "normalen" Typ.
 

KSG9|sebastian

Top Contributor
Hast du das Package oder kommst du da dran?

Falls ja:

Code:
paratypes = method.getParameterTypes();
Class<?> supClass = paratype.getClass().getGenericSuperclass();


Package.getOwnedType(supClass.getName());

Edith sagt:
Du musst so oder so über das Array iterieren, welches method.getParameterTypes() liefert..schließlich willst du ja nicht das Class[] als Type hinzufügen sondern dessen Elemente.
 

DerSchokoBär

Aktives Mitglied
Hast du das Package oder kommst du da dran?
Das Package kann ich ganz normal importieren oder was meinst du genau mit "dran kommen"?

Java:
Class<?> supClass = paratype.getClass().getGenericSuperclass();
Das muss noch mit (Class<?>) gecastet werden.

Java:
Package.getOwnedType(supClass.getName());
Falls du
Code:
java.lang.Package
meinst, wird die getOwnedType() Methode nicht gefunden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Innerer Type einer generischen Collection herausfinden? Allgemeine Java-Themen 13
M java: unexpected type Allgemeine Java-Themen 2
BinFox Type-Parameterverwirrung Allgemeine Java-Themen 7
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
K Wildcard und class type Allgemeine Java-Themen 9
bueseb84 required a bean of type that could not be found. Allgemeine Java-Themen 2
N Generic Type einer Generischen Klasse während der Laufzeit bekommen Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
T JNA: Invalid sizeof type 4 Allgemeine Java-Themen 0
P List<Type> Konvertieren in List<List<Type>> Allgemeine Java-Themen 3
Tarrew Generics - Type erasure Allgemeine Java-Themen 5
S Welcher Schleifen type für eine Berechnung Allgemeine Java-Themen 7
S Type mismatch: cannot convert from Object to float Allgemeine Java-Themen 3
V Wildcard aus Parameter in return type Allgemeine Java-Themen 2
P Default constructor cannot handle exception type Allgemeine Java-Themen 6
C Kompletter Pfad aus "input type=file" auslesen Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
P Mime Type aus Stream lesen Allgemeine Java-Themen 5
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4
G POI: Leere Zelle nimmt keinen Type an Allgemeine Java-Themen 8
S Type safety Warnings beim casten von Generics Allgemeine Java-Themen 6
M Type-Cast Allgemeine Java-Themen 3
B Warum return type Object ? Allgemeine Java-Themen 4
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
S Collection Type Allgemeine Java-Themen 8
zilti NetBeans 6.0: neuen File Type definieren Allgemeine Java-Themen 2
S anderer Mime Type bei xml-Datei Allgemeine Java-Themen 2
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
A serial Version UID field of type long Allgemeine Java-Themen 5
G Enclosing Type Allgemeine Java-Themen 3
G [quote]the type HashMap is not generic; it cannot be paramet Allgemeine Java-Themen 4
C Generic Type ermitteln Allgemeine Java-Themen 3
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
H References to generic type Test.A<typ> should be param Allgemeine Java-Themen 5
byte Generic Type einer List zur Laufzeit rausfinden? Allgemeine Java-Themen 4
T Generics, Enumerations und Type-Casts Allgemeine Java-Themen 13
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
C REG_BINARY Type in Windows Registry ausgeben ? Allgemeine Java-Themen 4
M Content-Type setzen und auslesen? Allgemeine Java-Themen 2
J Wie kann man herausfinden, wo der Wert herkommt ? Allgemeine Java-Themen 13
J (Effektives) Arbeitverzeichnis herausfinden Allgemeine Java-Themen 5
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
M Kameradaten bzw. Einstellungen herausfinden Allgemeine Java-Themen 9
Thallius Herausfinden ob ein externes Programm schon gestartet ist? Allgemeine Java-Themen 10
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
M System herausfinden Allgemeine Java-Themen 6
J Aktuellen Prozess herausfinden. Allgemeine Java-Themen 3
F Herausfinden ob nur 1 oder 0 in einem String ist. Allgemeine Java-Themen 4
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Benötigte Klassen herausfinden Allgemeine Java-Themen 11
B bereits gelesene Bytes herausfinden Allgemeine Java-Themen 10
Zettelkasten Aus String bestimmtes Zeichen herausfinden Allgemeine Java-Themen 19
E Standort des Programms herausfinden Allgemeine Java-Themen 4
V Calendar monatstage herausfinden? Allgemeine Java-Themen 2
M Username herausfinden? Allgemeine Java-Themen 2
Bloodredangel Zeitstempel von Dateien in Archiven herausfinden Allgemeine Java-Themen 2
H Decmal-Trenner, wie herausfinden Allgemeine Java-Themen 3
P Textfile Encoding herausfinden Allgemeine Java-Themen 2
B Herausfinden ob Datum existiert Allgemeine Java-Themen 2
G Globalen Programm-Ordner herausfinden Allgemeine Java-Themen 7
oltoko PID für das laufende Java Programm herausfinden Allgemeine Java-Themen 3
G Wildcards - Methoden herausfinden. Allgemeine Java-Themen 7
D Benutzerrechte herausfinden Allgemeine Java-Themen 3
G System32 Folder herausfinden Allgemeine Java-Themen 5
D Herstelldatum eine Datei herausfinden Allgemeine Java-Themen 7
U Benutzer herausfinden Allgemeine Java-Themen 3
E Frequenz des Monitors herausfinden Allgemeine Java-Themen 12
Q Aktuelles Verzeichniss herausfinden. Allgemeine Java-Themen 2
V oberste klasse herausfinden. Allgemeine Java-Themen 21
P Java JRE herausfinden Allgemeine Java-Themen 2
G Standard-Browser herausfinden Allgemeine Java-Themen 4
W Herausfinden, wo das Programm liegt. Allgemeine Java-Themen 8
J Document_Root des Webordners herausfinden Allgemeine Java-Themen 2
F Parameter Name herausfinden Allgemeine Java-Themen 25
T aus .cda File Titel und Sänger herausfinden Allgemeine Java-Themen 6
T angemeldeten usernamen herausfinden Allgemeine Java-Themen 4
C Java-Version herausfinden Allgemeine Java-Themen 9
R Geschwindigkeit herausfinden Allgemeine Java-Themen 2
G Speicherauslastung herausfinden Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben