reflection api

xyZman

Bekanntes Mitglied
Hi. Habe hier eine Klasse
Java:
class AB {
	int a;
	static int b;
	final public static int c = 12;

Ich möchte jetzt die Klassendefinitionen ausgeben.
Ausgabe soll dann einfach die ganze Klasse sein.
Also output:
Java:
class AB {
	int a;
	static int b;
	final public static int c = 12;
Angefangen habe ich mit dem Klassennamen selbst.
Nun möchte ich mein int i kommen. Dies mache ich doch mit
der Klasse java.lang.Class getType() ?. Ich weis aber nicht so recht wie ich das implementiere..
Gibt immer Fehler.
Java:
public static void main(String[]args){
	druckeKlasse(new AB());
	
}
	
	static void druckeKlasse(Object obj){
		IO.println( obj.getClass()+" {");
		
	}
}



lg
 
Da hänge ich schon seit einiger Zeit fest. Bin allerdings noch nicht wesentlich schlauer.
Derartige Beispiele liegen mir vor
Java:
 Class<?> c = Class.forName(args[0]);
	    Field f = c.getField(args[1]);
	    System.out.format("Type: %s%n", f.getType());
 
Zuletzt bearbeitet:
Java:
Class<?> c = Class.forName(args[0]);
wieso...
die Class hast du ja schon... obj.getClass()....

und was willst du mit den args? du kopierst halt einfach was da steht?

Schau halt mal in die doku..

zb

Java:
AB ab = new AB();
Class clazz = ab.getClass();
Field[] fields = clazz.getDeclaredFields();
for(Field field : fields){
        	System.out.println(Modifier.toString(field.getModifiers())+" "+field.getType()+" "+field.getName());
}
 
Hier mal eine eine kleine Zusammenfassung für dich, wie man überhaupt eine vernünftige Reflection erstellt. Und wenn du das anständig gemacht hast kannst du den Klassennamen ohne Probleme ausgeben:
Java:
String[] werte = readStringFromFile();
		try {
			// Klasse anhand ihres Namens auswählen
			Class unbekannteKlasse = Class.forName(werte[0]);
			System.out.println("1.Zu instanziierende Klasse: "
					+ unbekannteKlasse);

			// Konstruktor anhand der Parameter bestimmen
			Class[] parameterTypes = { String.class };
			Constructor konstruktor = unbekannteKlasse
					.getConstructor(parameterTypes);
			System.out.println("2.Argumenttypen des Konstruktors: "
					+ unbekannteKlasse.getDeclaredConstructor(parameterTypes));

			// Konstruktor instanziieren
			Object[] initargs = { werte[1] };
			Object instanz = konstruktor.newInstance(initargs);

			// Methode auswählen
			String methodenname = werte[1];
			Class[] parameterTypes2 = { String.class };
			Method methode = unbekannteKlasse.getMethod(methodenname,
					parameterTypes2);
			System.out.println("3.Die Methode heisst " + methode.getName());

			// Methode aufrufen
			Object[] uebergabewerte = { werte[2] };
			methode.invoke(instanz, uebergabewerte);
			System.out.println("4.Values die an die Methode übergeben werden: "
					+ werte[2]);

		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private static String[] readStringFromFile() {
		String[] rueckgabeWerte = { "uebung11.InterfaceNutzer", "gibWasaus",
				"Bliblub" };
		return rueckgabeWerte;
 

Zurück
Oben