【发布时间】:2013-11-30 11:52:13
【问题描述】:
是否可以调用参数对象或参数类是子类的方法,并且方法本身将超类作为参数?
我尝试使用抽象类问题的具体实现来调用此方法public void setNewProblem(Problem problem);。不幸的是,我收到了 NoSuchMethodException 异常。
我这样调用调用:
Method method = model.getClass().getMethod("set" + propertyName, new Class[] { newValue.getClass() });
method.invoke(model, newValue);
如果我将 newValue.getClass() 更改为 Problem.class 一切正常。知道如何将子类传递给public void setNewProblem(Problem problem);?
【问题讨论】:
-
异常不是invoke()引起的。它是由 getMethod() 引起的。您需要实际声明的类才能在类中找到方法。但是您可以在调用该方法时传递任何子类实例。几乎每次使用反射时,都不应该这样做。可能有比反射更好的方法来实现您想要的。你想达到什么目标?
-
是的,异常是由getMethod()引起的,也许我在那里不清楚。我使用this MVC 实现。在这个实现中,控制器使用调用来告诉模型视图中发生了什么变化。
标签: java reflection subclass invoke superclass