我有一堂课

ServiceImpl

这不利于界面
Service

我在另一个要调用的jar中有一个方法,但这需要
Service

作为输入。方法如下:
 public void setService(Service service) {
    context.setService(service);
}

我试图使用反射来调用此方法
final ServiceImpl myService = new ServiceImpl(param1, param2);


method = beanClass.getMethod("setService",Service.class);

method.invoke("setService", myService);

但是我得到了错误:
Exception in thread "main" java.lang.IllegalArgumentException: object is not an instance of declaring class

据说它期望有一个Service类,但是我传入了ServiceImpl类型的对象。但是,既然ServiceImpl实现了Service,那为什么会是一个问题呢?我该如何解决?

最佳答案

反射所抱怨的不是Service参数,它是第一个参数。有效地,您的代码尝试执行此操作:

"setService".setService(myService);

由于明显的原因而无法正常工作。

将要在其中设置服务的对象作为第一个参数传递以解决此问题:
method.invoke(instanceOfBeanClass, myService);

10-06 12:52