Java 我可以将子类实例传递给接受超类实例的方法吗
我有一个类似的设置。当我尝试使用java反射调用execRequest方法,并在parameterArray中传递子类实例DelRequest时,我得到一个NoSuchMethodFound异常Java 我可以将子类实例传递给接受超类实例的方法吗,java,reflection,polymorphism,downcast,upcasting,Java,Reflection,Polymorphism,Downcast,Upcasting,我有一个类似的设置。当我尝试使用java反射调用execRequest方法,并在parameterArray中传递子类实例DelRequest时,我得到一个NoSuchMethodFound异常 DelRequest delReq=new DelRequest(); delReq.setMsg("something"); Request req=(Request) delReq; 我只有很少的服务方法,然后最终调用以下代码行。注意,这次我传递的是超类实例,它的定义是方法签名公共字符串execR
DelRequest delReq=new DelRequest();
delReq.setMsg("something");
Request req=(Request) delReq;
我只有很少的服务方法,然后最终调用以下代码行。注意,这次我传递的是超类实例,它的定义是方法签名公共字符串execRequest(请求请求)
这是我的基本设置,请指出我错在哪里,可以这样做吗
class DelRequest extends Request {
private String msg;
/* getters and setters */
}
class Request {
}
class ExecuteRequest{
public String execRequest(Request request){
/* request do something*/
}
}
反射API要求使用声明的参数类型。因此,即使可以使用
DelRequest
调用execRequest
,也需要使用Request.class
作为参数
参数类型parameterTypes
参数是一个Class
对象数组,它
按照声明的顺序标识方法的形式参数类型。如果
parameterTypes
为空,将其视为空数组
是的,你可以。但我想这不是你的问题所在。
execRequest
是否需要是静态的?静态函数和继承不是很好的组合!对不起,这不是静态的,我会编辑的,我也在尝试同样的事情,可能是我做错了什么。我尝试将DelRequest****类型转换为***请求并传递请求实例,但这似乎不起作用。有什么帮助吗???@Shahbaz我不明白。请用尝试的代码编辑你的问题。我已经编辑了这是虚拟代码,不是实际代码,但这是我正在做的actually@Shahbaz在您的示例中,parameterary
是什么?它应该只是一个新类[]{Request.Class}
。我现在遇到了一个问题,实际上lClass.getMethod(“execRequest”,parameterArray)是在我们的框架中发生的,parameterArray数组由DelRequest.Class组成。我添加了一个条件检查,并使它成为Request.class,它正在工作
class DelRequest extends Request {
private String msg;
/* getters and setters */
}
class Request {
}
class ExecuteRequest{
public String execRequest(Request request){
/* request do something*/
}
}