2016-07-01 54 views
0

我試圖如下使用方法getFields()一個簡單的啞類:

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

我寫

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

這是我得到的輸出:

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

有人能解釋爲什麼只有a出現在列表中? 什麼是其他實體C.__$stMC? 我在網上搜索,似乎stMC代表staticMetaClass。請澄清。由於

回答

0

因爲按照文件,getFields()返回只有公共領域:

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

要麼使用getDeclaredFields(),或使用Groovy的元編程特性,即:

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

但在Groovy中,所有的字段都是默認的。所以'getFields()'也應該包含這些,不是嗎? 另外,關於$ stMC的任何想法?它代表什麼? –

+0

所有字段都有公共訪問修飾符。當您使用obj.prop =「x」更改值時,它實際上正在調用一個方法。在編譯的java字段下是不公開的。 –