开发桌面应用程序时,我在Oracle Network上遵循此article来实现MVC.
不过,我有一个问题:我正在使用由SimpleDirectory和WildcardDirectory扩展的抽象Directory类.模型管理器方法之一接受Directory作为参数:
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时缺少一些东西.
编辑:我读了docs,并在getMethod中说
The parameterTypes parameter is an array of Class objects that identify
the method’s formal parameter types,
in declared order.
所以我想这就是问题所在.