|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
[Java] problema con la reflection nel caso di ereditarietà
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/ar...ex-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: Codice:
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();
}
}
}
Codice:
public void addDirectoryDummy(Directory d){
System.out.println("Hello!");
}
Codice:
public void dummy( Directory d){
setModelProperty( BACKUP_DUMMY, d );
}
Codice:
this.controller.dummy( new SimpleDirectory(0,"ciao") ); Codice:
java.lang.NoSuchMethodException: it.univpm.quickbackup.models.BackupManager.addDirectoryDummy(it.univpm.quickbackup.models.SimpleDirectory)
at java.lang.Class.getMethod(Class.java:1605)
Quote:
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole |
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
In effetti leggendo la descrizione dell'algoritmo utilizzato pare che non abbiano tenuto conto di questo.
Non so se va bene per le tue esigenze ma potresti scrivere un metodo che faccia quello che ti serve. Dovresti utilizzare il metodo getMethods() di Class per ottenere tutti i metodi e poi tra questi cercare quello giusto confrontando i tipi dei parametri. I parametri li ottieni con il metodo getParameterTypes() di Method. Per fare i confronti useresti il metodo isAssignableFrom() di Class. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
Grazie mille! Risolto!
Codice:
public class Test
{
public static void main(String[] args) throws Exception {
Test test = new Test();
Child child = new Child();
// A working approach
for (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 {
}
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole Ultima modifica di dierre : 21-01-2011 alle 14:30. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Se hai 5 minuti potresti tornare alla pagina dell'articolo e inviare un feedback segnalando errore e correzione usando la funzione a fondo pagina di "Rate and Review"
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
Non è esattamente un errore, e la mia non è esattamente una soluzione in quanto manca la gestione del numero variabile di argomenti. Io al momento sto facendo un override per avere 1 o 0 argomenti da invocare col nome del metodo che è di una bruttezza unica.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Sono un po' a corto di sonno, e oggi ogni tanto svariono
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Interamnia Urbs
Messaggi: 2125
|
A chi lo dici, io ho un esame lunedì.
__________________
Un wormhole (buco di tarlo, in italiano), detto anche Ponte di Einstein-Rosen, è una ipotetica caratteristica topologica dello spaziotempo che è essenzialmente una "scorciatoia" da un punto dell'universo a un altro, che permetterebbe di viaggiare tra di essi più velocemente di quanto impiegherebbe la luce a percorrere la distanza attraverso lo spazio normale. Go to a Wormhole |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:05.




















