Java 无法使用反射API访问方法

Java 无法使用反射API访问方法,java,reflection,jooq,Java,Reflection,Jooq,我正在尝试使用反射API访问setter并在运行时更改值。我有一个JasperReport对象,它有一个名为getDefaultStyle的方法,它反过来允许我调用setFontName方法,如下所示 jasperReport.getDefaultStyle().setFontName() on(jasperReport).call("getDefaultStyle").call("setFontName").set("fontName", "Helvetica"); “setFontNam

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

jasperReport.getDefaultStyle().setFontName()
on(jasperReport).call("getDefaultStyle").call("setFontName").set("fontName", "Helvetica");
“setFontName”将字符串作为方法参数,并将其设置为字体。我正试图在rutime期间像这样更改字体值

jasperReport.getDefaultStyle().setFontName()
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”)
对此:
(jasperReport.call(“getDefaultStyle”).call(“setFontName”、“Helvetica”)
因为您需要将新值作为参数传递。 翻译成“普通”java,它将是
jasperReport.getDefaultStyle().setFontName(“Helvetica”)

而不是
jasperReport.getDefaultStyle().setFontName().fontName=“Helvetica”


我想您会发现这是没有意义的,因为您首先使用setter()无参数设置字段,然后出于未知原因尝试在返回的void上设置字段,仍然抛出相同的异常。@RoshanUpreti:根据公开的Javadoc:and,这个答案是正确的。也许,您需要提供一个更完整的示例来帮助更好地再现问题,包括:1)显示如何创建
jasperReport
对象,2)指示JasperReports和jOOR的库版本,等等。