java - 使用反射时处理或转换从 method.invoke() 返回的对象

标签 java exception object reflection casting

使用 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);
        }

编辑:根据下面的答案,我在验证时遇到了问题。

最佳答案

很简单:您没有获得 java.lang.String 的实例,而是获得 java.lang.Class 的实例。您在评论中的澄清使一切变得一目了然:方法 java.lang.Object.getClass 通过了您的 isMethodGetter 测试,但它不是您想要的。只需增强该检查代码,不要让确切的名称 getClass 通过。

关于java - 使用反射时处理或转换从 method.invoke() 返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10262599/

相关文章:

java - java中的clone()方法是如何工作的?

objective-c - Objective-C 和 Swift 之间的 UserDefaults

java - 将数据从输入文件传输到输出文件,出现异常

java - 使用倒计时器计算时间之间的月数

.net - 添加服务引用时出错 : Type is a recursive collection data contract which is not supported

java - 线程 "main"java.util.NoSuchElementException : No line found 中的异常

c# - 向 ASP.NET Web 应用程序添加顶级异常处理

javascript - 将引用设置为其他内容后保留 Javascript 引用

java - 使用实体字段的值来分隔表单 :input max value

java - 安全删除java实现