2012-04-21 9 views
1

Javaを使用して、method.invokeで呼び出しているメソッドがあり、文字列を返します。 Method.invokeはStringにキャストできないオブジェクトを返します。 オブジェクトを文字列としてどのように使用するのですか?反射上のドキュメントでreflectionを使用しているときにmethod.invoke()から返されたオブジェクトを処理またはキャストする

それは次のことを示しています

Object o = m.invoke(t, new Locale(args[1], args[2], args[3])); 
out.format("%s() returned %b%n", mname, (Boolean) o); 

しかし、私のコードは、この、私は例外を取得ん:のjava.lang.Classはjava.lang.Stringで

にキャストすることはできませんこれは抽象クラスです。次にBeanの実装がいくつかあります。

  Method[] methods = this.getClass().getMethods(); 
    for (Method method : methods) { 
     if (isMethodGetter(method)) { 

      try { 

       Object message = method.invoke(this); // expect a string  
         Object message = method.invoke(this); // expect a string 

       if (message == null) { 
        // no messeage 
       } else { 
        logger.debug("Calling listAnswers: got an answer: " 
          + message); 

        // create an answer object from the reflected 
        Answer answer = new Answer(); 
        answer.setText((String)message);//cast as string 
        answerList.add(answer); 
     } 

編集:以下の回答によると、私は検証に問題がありました。土曜日の紳士の仕事に戻ってくれてありがとう。

答えて

4

それは簡単です:java.lang.Stringのインスタンスは得られませんでしたが、java.lang.Classです。コメント内のあなたの明確化はすべてそれをすべて明瞭にします:方法java.lang.Object.getClassはあなたのisMethodGetterテストに合格しますが、あなたが望むことは望ましくありません。ちょうどその正確な名前がgetClassに合格しないようにするためにコードをチェックしてください。

+0

何も特別なことはありませんが、私はこの問題を抱えている他の人のために質問を編集します...多分私は面白いことをしています:) Method [] methods = this.getClass()。getMethods(); (メソッドのメソッド:メソッド)が \t \t { \t \t \t IF(isMethodGetter(メソッド)){ \t \t \t \t \t \t \t \t試み{ \t \t \t \t \tオブジェクトメッセージ= method.invoke(この); //文字列を受け取る – JasonG

+0

別の表情があります - ありがとう! – JasonG

+0

あなたは100%正しいです。私はログをチェックし、実際にgetClassがデバッグで表示されていることに気付いた。DEBUG [com.prevacidecrm.questionaire.model.Questionaire listAnswers] = listAnswersを呼ぶ:答えを得た:クラスcom.prevacidecrm.questionaire.model.impl.PerksEntryQuestionaire。素晴らしい - ありがとう。 – JasonG

1

ClassCastExceptionが発生した場合、実際に正しいメソッドを呼び出しているかどうかを確認する必要があると思います。しかし、実際に文字列を期待している場合は、返されたオブジェクトがnullでない場合は、おそらく、toString()メソッドを呼び出すことができます。

+0

これは私がやったことであり、動作します。私は、別のタイプが期待されていたとしても、これを適切に行う方法を知ることに興味があります。 – JasonG

+0

@JasonG最新の回答をお読みください。あなたの状況は、はっきりしていて、簡単に修正できます。 –

関連する問題