2016-07-01 34 views
0

ich die Methode getFields() auf einem einfachen Dummy-Klasse zu verwenden versuchte, wie folgt:

class C{ 
    public int a 
    int b 
    String s 
    float f 
    static int x 
} 

Ich schrieb

def c = new C() 
println c.class.getFields() 

Dies ist, was ich als Ausgabe bekommen:

[public int C.a, public static transient boolean C.__$stMC] 

Kann jemand erklären, warum nur a erscheint in der Liste? Und was ist die andere Entität C.__$stMC? Ich suchte online, scheint stMC staticMetaClass. Bitte klären Sie. Dank

Antwort

0

Da gemäß der Dokumentation, getFields() nur die öffentlichen Felder zurück:

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getFields()

Entweder Verwendung getDeclaredFields() oder die Groovy Meta-Programmierung Eigenschaften verwenden, dh:

def c = new C() 
println c.class.getDeclaredFields().toString() 
println c.getProperties().toString() 
+0

Aber In Groovy sind alle Felder standardmäßig public. Also sollte "getFields()" auch diese beinhalten, oder? Auch irgendeine Idee über $ stMC? Für was steht das? –

+0

Alle Felder haben öffentliche Zugriffsmodifikatoren. Wenn Sie den Wert mit obj.prop = "x" ändern, ruft er unter der Haube tatsächlich eine Methode auf. Unter dem kompilierten Java-Feld ist nicht öffentlich. –