Auf annotierte Felder oder Methoden zugreifen

Status
Nicht offen für weitere Antworten.

deamon

Bekanntes Mitglied
Ich möchte den Wert eines mit einer bestimmten Annotation versehenen Feldes bzw. den Rückgabewert einer entsprechend annotierten Methode auslesen.

Folgendes habe ich versucht:
Code:
public class Domain{
	@Id
	private long id = 1;
	private String name;
}

Ausgelesen werden soll das mit:
Code:
import java.lang.reflect.Field;
import javax.persistence.Id;

public class Annotest{

	public static void main(String[] args)
	throws IllegalArgumentException, IllegalAccessException{
		Domain d = new Domain();
		Class c = d.getClass();
		for(Field f : c.getFields())
		{
			System.out.println("Feld: " +f);
			if(f.isAnnotationPresent(Id.class))
				System.out.println("Wert: " + f.get(d));
		}
	}
}

Bei der Ausführung gibt es keine Ausgabe und keine Fehlermeldung.

Was ist daran falsch? Wie kann ich den Inhalt eines annotierten Feldes auslesen?
 
Zuletzt bearbeitet:
R

Roar

Gast
hast du deine annotation mit:
@Retention(RetentionPolicy.RUNTIME)
annotiert, ansonsten ist die annotation nämlich nicht per reflection verfügbar.
 

deamon

Bekanntes Mitglied
c.getDeclairedFields() war der springende Punkt! Damit funktioniert es.

Laut Doku werden damit aber keine Annotationen von Oberklassen angegeben. Wie kann man die auslesen? Bei JPA bzw. Hibernate kann man ein privates Feld mit @Id annotieren und eine abgeleitete Klasse wird auch mit Id gespeichert. Von der Vererbung her müsste es ja mindestens "protected" sein, aber es geht auch mit "private". Wie geht das bei Hibernate?
 

deamon

Bekanntes Mitglied
Ich habe jetzt herausgefunden, wie man auf private, annotierte Felder aus Oberklassen zugreifen kann.

Code:
import javax.persistence.Id;

public class Domain{
	@Id
	private long id = 1;
	private String name;
}

Code:
public class SubDomain extends Domain{
}

Das folgende Programm liest die Felder der aktuellen Klasse aus. Wenn dort kein entsprechend annotiertes Feld gefunden wurde, wird der Vorgang mit der Oberklasse wiederholt, so lange bis es gefunden wurde, oder keine Oberklasse mehr existiert.
Code:
import java.lang.reflect.Field;
import javax.persistence.Id;

public class Annotest{

	public static void main(String[] args)
	throws IllegalArgumentException, IllegalAccessException
	{
		Domain d = new Domain();
		Object value = getAnnotatedFieldValue(d.getClass(), d, Id.class);
		System.out.println("Wert: " + value);
		
	}

	public static Object getAnnotatedFieldValue(
					Class inspectedClass, Object inspectedObject, Class annotationType)
					throws IllegalArgumentException, IllegalAccessException
	{
		Field[] fields = inspectedClass.getDeclaredFields();
		Field.setAccessible(fields, true);
		for(Field f : fields)
		{
			if(f.isAnnotationPresent(annotationType))
			{
				return f.get(inspectedObject);
			}
				
		}
		getAnnotatedFieldValue(inspectedClass.getSuperclass(), inspectedObject,
						annotationType);
		return null;
	}
}

Gibt es noch Verbesserungsvorschläge?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Lombock primitive Felder in RequiredArgsConstructor Allgemeine Java-Themen 2
parrot Mehrdimmensionale Felder Allgemeine Java-Themen 4
parrot Felder - Feldwerte verdoppeln Allgemeine Java-Themen 18
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
S Java Felder Allgemeine Java-Themen 13
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
perlenfischer1984 Mit Lombok Builder Felder in Super Klasse füllen Allgemeine Java-Themen 12
S "Vererben" statischer Felder/Methoden Allgemeine Java-Themen 4
T URL + Felder Allgemeine Java-Themen 1
C Zugriff auf Event felder Allgemeine Java-Themen 0
L iText PDF Form-Felder werden nach Bearbeitung mit iText nicht mehr richtig erkannt. Allgemeine Java-Themen 2
faetzminator verschiedene Beans, verschiedene Felder "koppeln" Allgemeine Java-Themen 3
K Hilfe Felder Allgemeine Java-Themen 7
I Vergleich zweier Felder Allgemeine Java-Themen 3
S Zu viele Felder. Allgemeine Java-Themen 4
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
megachucky Java Reflection -> versteckte Felder finden? Allgemeine Java-Themen 3
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
D Felder (Arrays) Allgemeine Java-Themen 4
F (Wie) sortiert ihr eure Felder, Methoden, etc? Allgemeine Java-Themen 19
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
M Felder + Werte einer Klasse auslesen Allgemeine Java-Themen 6
P Bei String alle Alphanumerischen Felder löschen Allgemeine Java-Themen 8
D Interface, aber die Methoden bleiben teilweise gleich Allgemeine Java-Themen 35
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
Encera Unterschied zweier "toString"-Methoden Allgemeine Java-Themen 1
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
B Arrays von Methoden möglich? Allgemeine Java-Themen 44
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
N abstracte klassen methoden Allgemeine Java-Themen 32
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
LimDul Hä? Lambda-Ausdruck geht, Methoden-Referenz nicht Allgemeine Java-Themen 8
B Methoden Java Getter und Setter Methoden Allgemeine Java-Themen 9
Y Java Methoden unterschiedliche Zahlenreihen Allgemeine Java-Themen 2
S Interface Design von HookUp oder Callback Methoden für eigenes Framework Allgemeine Java-Themen 9
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
D Methoden Methoden anpassen und fehlende Funktionen hinzufügen Allgemeine Java-Themen 475
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
R Statistische Methoden (Mathematik) Aufgabe Allgemeine Java-Themen 9
X Brüche kürzen mittels Methoden und ggT Allgemeine Java-Themen 15
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L mehrere Methoden Allgemeine Java-Themen 19
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
A Automatisches Methoden Laufzeiten logging? Allgemeine Java-Themen 7
M Quellcode von Java-Methoden Allgemeine Java-Themen 9
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
N HashMap und Methoden richtig einbinden Allgemeine Java-Themen 2
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
Q-bert Methoden Methoden in Java Allgemeine Java-Themen 13
D Methoden Java-Aufgabe Allgemeine Java-Themen 2
M Compiler-Fehler Methoden-Referenz Allgemeine Java-Themen 5
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
S 2 methoden mit gleichen namen und ein Interface Allgemeine Java-Themen 9
F Enum-werte als Methoden-Parameter übergeben Allgemeine Java-Themen 6
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
E OOP Objekte und Methoden Allgemeine Java-Themen 1
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
T Java Array in Methoden Allgemeine Java-Themen 1
D Code für bereitgestellte Methoden Allgemeine Java-Themen 1
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
R Signatur von Methoden in eine Datei schreiben? Allgemeine Java-Themen 4
A Methoden verändern Allgemeine Java-Themen 12
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
J Best Practice Testen von protected Methoden Allgemeine Java-Themen 7
L Methoden "Schiffe versenken" Quellcode in Methoden umwandeln Allgemeine Java-Themen 6
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
Sogomn Best Practice "Doppelte" Methoden Allgemeine Java-Themen 3
Paul15 String Methoden Allgemeine Java-Themen 7
G Methoden BMI -Wert Aufgabe(Methoden) Allgemeine Java-Themen 4
F Testen von Methoden Allgemeine Java-Themen 3
F Methoden in der Enumeration Klasse Allgemeine Java-Themen 1
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
T Überschreiben von Methoden Allgemeine Java-Themen 6
M Methoden werden in falscher Reihenfolge bearbeitet Allgemeine Java-Themen 10
S Methoden Methoden überschreiben Allgemeine Java-Themen 3
N Threads statische Methoden in Threads Allgemeine Java-Themen 5
O Java-Obfuscator, welcher einzelne Methoden, Klassen und Ordnerstrukturen ausnehmen kann. Allgemeine Java-Themen 1
A also definition von klassen und string methoden und algorithmik Allgemeine Java-Themen 13
X Eigene Annotation - mit Bedingung für ganze Klassen oder Methoden Allgemeine Java-Themen 2
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
S Methoden Frage Allgemeine Java-Themen 2
R Wie kann man diese Methoden in arrays etablieren? Allgemeine Java-Themen 8
M Methoden in Rescources speichern Allgemeine Java-Themen 4
G Synchronisation nicht statischer Methoden Allgemeine Java-Themen 4
A Vererbung finale Methoden überschreiben Allgemeine Java-Themen 24
A Methoden parallelisieren? Allgemeine Java-Themen 2
L Methoden methoden an generischen klassentyp anpassen Allgemeine Java-Themen 5
C Methoden Übernahme von standart nativen Methoden? Allgemeine Java-Themen 9
B Zusammenfassen verschiedener ähnlicher Methoden Allgemeine Java-Themen 8
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
P Unterschiedliche Clone- Methoden Allgemeine Java-Themen 5
MQue Spezialfrage Überschreiben von Methoden Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben