dierre
19-01-2011, 18:00
Sto seguendo l'articolo di Oracle Techwork su come implementare l'mvc nel caso di desktop application ed ho un problema quando devo richiamare metodi del controller che hanno come argomento una superclasse.
http://www.oracle.com/technetwork/articles/javase/index-142890.html
Nel mio caso io ho come superclasse Directory e come sottoclassi SimpleDirectory e Wildcarded directory.
Il controller astratto ha questo metodo con cui richiama i metodi del modello:
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();
}
}
}
Nel mio caso il metodo da richiamare è:
public void addDirectoryDummy(Directory d){
System.out.println("Hello!");
}
e nel controller reale ho:
public void dummy( Directory d){
setModelProperty( BACKUP_DUMMY, d );
}
nella vista richiamo il controller in questo modo:
this.controller.dummy( new SimpleDirectory(0,"ciao") );
Da cui ho la seguente eccezione
java.lang.NoSuchMethodException: it.univpm.quickbackup.models.BackupManager.addDirectoryDummy(it.univpm.quickbackup.models.SimpleDirectory)
at java.lang.Class.getMethod(Class.java:1605)
Dalla documentazione ho che getMethod
The parameterTypes parameter is an array of Class objects that identify the method's formal parameter types, in declared order.
Come posso risolvere il problema?
http://www.oracle.com/technetwork/articles/javase/index-142890.html
Nel mio caso io ho come superclasse Directory e come sottoclassi SimpleDirectory e Wildcarded directory.
Il controller astratto ha questo metodo con cui richiama i metodi del modello:
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();
}
}
}
Nel mio caso il metodo da richiamare è:
public void addDirectoryDummy(Directory d){
System.out.println("Hello!");
}
e nel controller reale ho:
public void dummy( Directory d){
setModelProperty( BACKUP_DUMMY, d );
}
nella vista richiamo il controller in questo modo:
this.controller.dummy( new SimpleDirectory(0,"ciao") );
Da cui ho la seguente eccezione
java.lang.NoSuchMethodException: it.univpm.quickbackup.models.BackupManager.addDirectoryDummy(it.univpm.quickbackup.models.SimpleDirectory)
at java.lang.Class.getMethod(Class.java:1605)
Dalla documentazione ho che getMethod
The parameterTypes parameter is an array of Class objects that identify the method's formal parameter types, in declared order.
Come posso risolvere il problema?