当传入一个实现java反射接口的类时,会出现IllegalArgumentException异常



我有一个名为

的类
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,为什么这应该是一个问题呢?我该如何解决这个问题?

您试图在字符串对象"setService"上调用setServiceMethod#invoke的第一个参数是要调用方法的对象,而不是方法的名称(它已经知道它是谁)。

你想:

method.invoke(bean, myService);

…其中,beanClass对象beanClass所指向的类的实例。

反射所抱怨的不是Service参数,而是第一个参数。实际上,您的代码会尝试这样做:

"setService".setService(myService);

由于明显的原因不能工作。

传递要在其上设置服务的对象作为解决此问题的第一个参数:

method.invoke(instanceOfBeanClass, myService);

相关内容

  • 没有找到相关文章

最新更新