2009-05-21 23 views
19

Java Reflectonを理解しようとしていて、非整数セッターメソッドを扱うときに問題が発生しました。Java Reflectionクラスの型を持つgetDeclaredMethod()クラス

例として、以下の「getDeclaredMethod()」コールを解決するにはどうすればよいですか? Stringclassを使用して

import java.lang.reflect.*; 

class Target { 
    String value; 

    public Target() { this.value = new String("."); } 
    public void setValue(String value) { this.value = value; } 
    public String getValue() { return this.value; } 
} 

class ReflectionTest { 
    public static void main(String args[]) { 
     try { 
      Class myTarget = Class.forName("Target"); 

      Method myMethod; 
      myMethod = myTarget.getDeclaredMethod("getValue"); // Works! 
      System.out.println("Method Name: " + myMethod.toString()); 

      Class params[] = new Class[1]; 
      //params[0] = String.TYPE; // ?? What is the appropriate Class TYPE? 
      myMethod = myTarget.getDeclaredMethod("setValue", params); // ? Help ? 
      System.out.println("Method Name: " + myMethod.toString()); 

     } catch (Exception e) { 
      System.out.println("ERROR"); 
     } 
    } 
} 
+0

私はあなたのためにどのようなシナリオでクラスと変数にどのメソッドが含まれているかを知ろうとしますか?なぜ私はそれを知ろうとしますか?私は、このメソッドgetDeclaredMethod()、getDeclaredFields()などを使用する理由を探求しています... – gmhk

+0

を提案してください。リフレクションを使用する理由は、Jsonの直列化/逆シリアル化ライブラリを構築する場合です。よく知られているGoogle Gsonライブラリは、自分の仕事を達成するために反射を頻繁に使います。 このような使用例は永遠に続く可能性があります。たとえば、さまざまなJavaオブジェクトのプロパティをシリアル化して別のアプリケーションまたは別の言語に基づいてサーバーに送信するネットワーク・プロトコルを構築して、必要なすべてのクラスに対して直列化メソッドを実装する必要がないという膨大な時間を節約できます交換。 –

答えて

20
params[0] = String.class; 

Stringクラスに関連付けられているClass<?>を返します。

+4

私はアホです。ありがとう! – Nate

+1

(おっと、私はコメントをアップアップするつもりはありませんでした!) 先日、私が気付いていなかったことを追加したかったので、それほど明白ではありません。 – coobird

+0

私はあなたのために持っている1つの質問、どのようなシナリオで、どのメソッドがクラスと変数にあるかを知ろうとしますか?なぜ私はそれを知ろうとしますか?私は、このメソッドgetDeclaredMethod()、getDeclaredFields()などを使用する理由を探求しています。 – gmhk

関連する問題