使用 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/