Java Wie kann ich mit Reflection prüfen, ob ein Feld initialisiert ist oder Standardwert ist?

7

Also, sollte eine direkte Frage sein.

Sagen wir, ich habe eine Klasse mit vielen Feldern wie:

%Vor%

Wie kann ich mit Reflektion sehen, ob die Felder thizz , that und bar initialisiert wurden oder auf ihre Standardwerte von null, 0 und false gesetzt wurden?

    
rapadura 28.08.2011, 19:51
quelle

6 Antworten

19

Sie haben nur 7 primitive Typen und einen zu überprüfenden Referenztyp. Wenn Sie alle Zahlentypen zusammen gruppieren, müssen Sie nur nach drei Werten suchen.

%Vor%     
Peter Lawrey 28.08.2011, 22:15
quelle
6

Sie brauchen keine Reflexion ...

%Vor%

Sie könnten jedoch initialisiert und dann auf ihre Standardwerte zurückgesetzt worden sein. Wenn Sie wirklich wissen wollen, ob sie initialisiert wurden, könnten Sie so etwas tun:

%Vor%

/ bearbeiten Um alle Felder einer Klasse abzurufen, lesen Sie Class.getDeclaredFields () . Dies gibt jedes Feld, nicht nur die öffentlichen.

Von hier aus können Sie den Typ des Feldes überprüfen und seinen Wert erhalten:

%Vor%     
Jeffrey 28.08.2011 19:55
quelle
5

Peter Lawreys Antwort funktioniert gut für mich, außer für Felder des primitiven Datentyps char , was das Folgende aufwirft Ausnahme in meinem Code:

%Vor%

Also habe ich den char case:

hinzugefügt %Vor%

Character.MIN_VALUE ist '\u0000' , was der Standardwert von char laut Java-Dokumentation zu primitiven Datentypen .

    
Christophe Weis 10.11.2014 13:16
quelle
3

Sie können eine neue Instanz über eine Reflektion erstellen (die automatisch mit dem Standardwert initialisiert wird) und Ihr Objekt mit dieser Standardinstanz vergleichen.

%Vor%

PS: Diese Lösung löste auch das Problem mit char von Christophe Weis erwähnt.

    
JB Cha 21.11.2016 16:01
quelle
1

Das sollte dich in die richtige Richtung bringen.

%Vor%     
Preston 28.08.2011 20:08
quelle
1

Der Kern davon ist:

%Vor%

Nun können Sie nur die öffentlichen Felder lesen.

Wenn Ihr Objekt den getX / setX-Namenskonventionen folgt, können Sie alternativ getMethods () verwenden und nach den Methoden "getXxx" und "setXxx" suchen, um die Existenz von einstellbaren Feldern abzuleiten und diese Getter aufzurufen für die erwarteten Standardwerte.

    
david van brink 28.08.2011 20:08
quelle

Tags und Links