public class Test{ public static void main(String[] args) throws Exception { Test test = new test();Child child = new Child();// Your approach, which doesn’t worktry { test.getClass().getmethod('doSomething', new Class[] { child.getClass() });} catch (NoSuchMethodException ex) { System.out.println('This doesn’t work');}// A working approachfor (Method method : test.getClass().getmethods()) { if ('doSomething'.equals(method.getName())) {if (method.getParameterTypes()[0].isAssignableFrom(child.getClass())) { method.invoke(test, child);} }}System.out.println('This works'); } public void doSomething(Parent parent) { }}class Parent {}class Child extends Parent {}解决方法
在开发桌面应用程序时,我在OracleNetwork上关注本文以实现MVC。但是,我有一个问题:我正在使用由和扩展的抽象Directory 类。模型管理器方法之一接受Directory作为参数:SimpleDirectory``WildcardDirectory
public void addDirectoryDummy(Directory d){ System.out.println('Hello!');}
抽象控制器使用setModelProperty调用此方法:
protected void setModelProperty(String propertyName,Object newValue) { for (AbstractModel model: registeredModels) {try { Method method = model.getClass().getMethod(propertyName,new Class[] { newValue.getClass() } ); method.invoke(model,newValue);} catch (Exception ex) { ex.printStackTrace();} }}
我从实际的控制器中这样调用它:
public void dummy( Directory d){ setModelProperty( BACKUP_DUMMY,d );}
我认为我有:
this.controller.dummy( new SimpleDirectory(0,'ciao') );
我有以下错误:
java.lang.NoSuchMethodException: it.univpm.quickbackup.models.BackupManager.addDirectoryDummy(it.univpm.quickbackup.models.SimpleDirectory) at java.lang.Class.getMethod(Class.java:1605)
我该如何解决这个问题?我在使用时缺少一些东西getMethod。
编辑:我已经阅读了文档,并在getMethod其中说
parameterTypes参数是Class对象的数组,这些Class对象按声明的顺序标识方法的形式参数类型。
所以我想这就是问题所在。