我正在尝试使用反射 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/