2016-12-05 4 views
0

これはTestクラスです。メソッドで宣言クラスを取得するにはどうすればよいですか?

package com.reflection; 

import com.reflection.test.A 

public class Main { 
    public void setA() { 
    A a = new A(); 
    } 
} 

その後、私はclsを使用して実際に私は本当にAクラスを取得したい

Class cls = cl.loadClass("com.reflection.Main"); 

次のコードのように、クラス、フィールド、メソッド、およびコンストラクタにアクセスして操作するためClassLoaderを使用して、すでにしようとしましたgetDeclaredClassesgetClassesを使用してください。結果は何もありませんでした。

+0

@Jobinフィールドは 'setA'から宣言されるべきですか? A a; public void setA(){a =新しいA(); } このような。 – kimkevin

答えて

2

純粋なJavaのリフレクションではできません。リフレクションでは、クラスとそのメンバーを見ることができますが、メソッド内のコードでは参照できません。

最も簡単なことは、おそらく、構築プロセスのどこかでjavap -vを実行し、修飾されたクラス名の出力を解析し、それらをどこかのプロパティファイルに格納することです。

asmやByteBuddyのようなバイトコードツールを使用するのは、クラス内のすべての命令にビジターを書き込み、マップ内のすべての命令のすべてのクラスを保存することです。これは理論的にはエレガントなアプローチですが、おそらく悪夢になるでしょう。

+0

あなたのすばらしい答えに感謝します。私は本当に解決を楽しみにしていますが、私は手がかりを見つけることができません。 – kimkevin

+0

私は本当にウルの助けを感謝します! – kimkevin