gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:30:43 25 4
gpt4 key购买 nike

使用 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 cannot be cast to java.lang.String

这是一个抽象类 - 然后会有多个 beans 实现。

            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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com