2016-07-01 3 views
0

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] 

誰かが理由だけを説明することができますがリストに表示されますか? そして、他のエンティティC.__$stMCは何ですか? 私はオンラインで検索しましたが、stMCはstaticMetaClassを表しているようです。どうか明らかにしてください。おかげ

答えて

0

ドキュメントごとに、れるGetFields()は唯一の公共分野返すので:

どちらの利用getDeclaredFields

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

()やGroovyのメタプログラミングプロパティは、IEを使用します。

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

しかし、 Groovyでは、すべてのフィールドはデフォルトで公開されます。だから、 'getFields()'もそれらを含めるべきでしょうか? また、$ stMCに関する考えはありますか?それは何のために立つのですか? –

+0

すべてのフィールドにはパブリックアクセス修飾子があります。 obj.prop = "x"を使用して値を変更すると、フードの下に実際にメソッドが呼び出されます。コンパイルされたJavaフィールドの下にはパブリックではありません。 –

関連する問題

 関連する問題