2

使用Java,我有一个方法,我用method.invoke 调用它返回一个字符串。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 cannot be cast to 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.String,而是 的java.lang.Class。您在评论中的澄清说明一切都非常清楚:该方法java.lang.Object.getClass通过了您的isMethodGetter测试,但它不是您想要的。只需增强检查代码以不让确切的名称getClass通过。

于 2012-04-21T20:16:19.077 回答
1

我认为如果你得到一个 ClassCastException 那么你需要检查你是否真的调用了正确的方法。但是为了有帮助,如果实际上您期望的是一个字符串,那么如果返回的对象不为空,您可以调用 toString() 方法。

于 2012-04-21T20:20:49.993 回答