2011-11-10 19 views
0

実行時にクラスのJavaメソッドを宣言しようとしました。私はコンパイル時にメソッドを記述したり、ハードコードしたりするべきではありません。反射を使用する方法がいくつかありますが、私は考え方は分かりません。これはどうしたらできますか?実行時のメソッド宣言

これは何から来ましたか: 私は次のような入力を読みます:

name=john,age=21 
name=smith,age=23 

次に、 "getname"と "getage"のメソッドですべての "name"と "age"の値にアクセスする必要があります。

ただし、名前と年齢の単語はieに変更できます。姓と長さ;私は "getsurname"と "getlength"のメソッドで姓と長さにアクセスしなければなりません。

私はgetXXXメソッドを呼び出すためにinvokeを使用することを知っています。しかし、実行時にどのように宣言できますか? これは実際の問題です。

+5

なぜこのようにしたいのですか教えてください。 –

+0

@ James.Xu私はなぜ私の質問を編集しました。 –

+0

'getXXX'をなぜ呼び出さなければなりませんか? HashMapに値を格納して、 'getMyValue(" name ")'を呼び出すのはなぜですか?あなたが問題の単純化したバージョンを与えていない限り、これは大砲IMHOで飛ぶ飛行です。 – jornb87

答えて

1

ASMのようなバイトコード生成ライブラリ、BeanShellのようなコードスニペットライブラリ、または実行時にコンパイラAPIを使用してクラスをコンパイルすることができます。

しかし、私はあなたがこれをする必要はないとも思っています。もっと簡単な方法があります。おそらく、あなたはこの方法で何をしたいと言うことができますか?

0

Reflectionは、新しいメソッドをクラスに追加するためのものではありません。 Peterがこれを達成するのに役立ついくつかの高度なツールがあります。

0

proxy classesと、おそらくJavaで書かれた、またはJavaとインタフェースできるスクリプト言語インタープリタ(例:Rhino)を使用することができます。 Rhinoとの統合を管理している場合は、おそらくJavascriptでメソッドを記述する必要がありますが、そこから必要なJavaオブジェクトにアクセスできます。

関連する問題