2

Javaを使用して、文字列を返すmethod.invokeで呼び出しているメソッドがあります。Method.invokeは、Stringにキャストできないオブジェクトを返します。オブジェクトを文字列として使用するにはどうすればよいですか?

リフレクションに関するドキュメントでは、次のように示されています。

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

2 に答える 2

4

簡単です。のインスタンスは取得しませんでしたが、のインスタンスを取得しましjava.lang.Stringjava.lang.Class。コメントでのあなたの明確化はそれをすべて明確にします:メソッドjava.lang.Object.getClassはあなたのisMethodGetterテストに合格しますが、それはあなたが望んでいたことではありません。getClass正確な名前が渡されないように、そのチェックコードを拡張するだけです。

于 2012-04-21T20:16:19.077 に答える
1

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

于 2012-04-21T20:20:49.993 に答える