java - 无法使用 Reflection API 访问方法

标签 java reflection jooq

我正在尝试使用反射 API 访问 setter 并在运行时更改值。我有一个 JasperReport 对象,它有一个名为 getDefaultStyle 的方法,该方法又允许我调用 setFontName 方法,如下所示

jasperReport.getDefaultStyle().setFontName()

'setFontName' 采用字符串作为方法参数并将其设置为字体。我正在尝试像这样在 rutime 期间更改字体值

on(jasperReport).call("getDefaultStyle").call("setFontName").set("fontName", "Helvetica");

但是,我收到此错误

org.jooq.tools.reflect.ReflectException: java.lang.NoSuchMethodException: No similar method setFontName with params [] could be found on type class java.lang.Object.

在反射 API 方面经验不足,需要一些帮助。

最佳答案

我不知道这个反射API,但似乎你转换了 on(jasperReport).call("getDefaultStyle").call("setFontName").set("fontName", "Helvetica");
对此:
on(jasperReport).call("getDefaultStyle").call("setFontName", "Helvetica");
因为您需要将新值作为参数传递。 翻译为“普通”java 它将是 jasperReport.getDefaultStyle().setFontName("Helvetica")
而不是
jasperReport.getDefaultStyle().setFontName().fontName = "Helvetica"
我认为您发现这没有意义,因为您首先使用不带参数的 setter() 设置字段,然后尝试在返回的 void 上设置字段

关于java - 无法使用 Reflection API 访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101627/

相关文章:

java - 在 JHipster 中配置 JOOQ

java - 如何从 jOOQ 查询中删除子句(order by)

C#:有人可以解释反射的实用性吗?

c# - 使用基本构造函数创建实例

java - 抽屉布局中的回收器 View

java - 吉布克斯 : how to remove the word "List" from auto generated java collections?

c# - MySql.Data 通过反射

java - 如何在 jOOQ 中为 VisitListener 中的每一行正确地将值添加到 StoreQuery 中?

java - 我可以在java中显式调用接口(interface)方法吗?如果没有那么有解决方法吗?

java - 使 "class"成为 transient 或可序列化但该类是可序列化的