爪哇 - NoSuchMethodException与反思(Java - NoSuchMethod

2019-10-18 00:21发布

我得到一个NoSuchMethodException执行时:

operacionDTO.getClass().getMethod("setPrioridad").invoke(operacionDTO, 0);

java.lang.NoSuchMethodException: xxxx.api.service.dto.RegasificacionDTO.setPrioridad()

但类RegasificacionDTO确实有一个叫公共方法setPrioridad(int i) ,如果在调试的时候我打电话:

operacionDTO.getClass().getMethods()

然后我得到的方法阵列,其中有一个setPrioridad 。 我已经试过一些其他类似的方法,我也得到了同样的错误。

Answer 1:

您需要包括参数签名。

 operacionDTO.getClass().getMethod("setPrioridad", Integer.TYPE)


Answer 2:

方法getMethod()接受方法名称和参数类型的可变参数阵列。 在你的情况,你应该调用getMethod("setPrioridad", int.class)一切都将正常工作。

这是因为在Java(在大多数面向对象的语言),您可以定义多个方法具有相同的名称和不同的签名,因此,使用给定的参数类型它们之间的区别系统。



Answer 3:

 operacionDTO.getClass().getMethod("setPrioridad",new Class[]{Integer.TYPE or Integer.class}).invoke(operacionDTO, 0);


文章来源: Java - NoSuchMethodException with reflection