我可以将子类实例传递给接受超类实例的方法

时间:2015-02-25 19:50:42

标签: java reflection polymorphism downcast upcasting

我有类似的设置。当我尝试使用java Reflections调用 execRequest 方法时,在 parameterArray 中传递的子类实例 DelRequest 我收到NoSuchMethodFound异常

DelRequest delReq=new DelRequest();
delReq.setMsg("something");
Request req=(Request) delReq;

我几乎没有服务方法,最后我调用了以下几行代码。请注意,这次我传递 req 超类实例,因为它定义的是方法签名 public String execRequest(请求请求)

lClass.getMethod( "execRequest", parameterArray)

这是我的基本设置,我错了,是否可以完成

class DelRequest extends Request {
private String msg;


 /* getters and setters */
}

class Request {
}



class ExecuteRequest{
public String execRequest(Request request){
/* request do something*/
}

}

1 个答案:

答案 0 :(得分:0)

Reflection API要求您使用参数的声明类型。因此,即使您可以使用execRequest调用DelRequest,也需要使用Request.class作为getMethod的参数。

  

parameterTypes参数是Class个对象的数组   按声明的顺序标识方法的形式参数类型。如果   parameterTypes为空,将其视为空数组。