|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jan 2006
Città: Agrigento
Messaggi: 18
|
[java] Registrare un metodo
Salve,
ho la necessità di registrare un metodo.... Ho ad esempio una classe generica public class MiaClasse { public void do() { ... metodoRegistratoDaUtente() //questo metodo non lo so chi è sarà l'utente a dirmi quale sarà ... } } qualcuno ha idea di come si faccia ? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2002
Città: Bolzano
Messaggi: 283
|
fra l'altro non vedo l'utilità
__________________
"Without silence there can be no music" - Potf PC: Case: Cooler Master Centurion590; Ali: Corsair VX550; MB: Gigabyte EX-58-DS4; CPU: Intel Core i7 920; Dissi: Noctua NH-U12P SE1366; Ram: G.Skill 3x2GB DDR3 1333; Sk Video: GeForce GTX260 216SP; HD: Samsung Spinpoint 1TB; Monitor Iiyama E2403WS |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Sono di corsa, perdona la sintesi. Per aggiungere un metodo ad una classe dovresti usare il package instrument e correlati. Una via più semplice è appoggiarsi all'introspezione: non puoi aggiungere un nuovo metodo ad una classe ma puoi infilare un'intera categoria di oggetti nella jvm.
Codice:
import java.lang.reflect.*;
public class MiaClasse {
private String className, methodName;
public void setMethod(String className, String methodName) {
this.className = className;
this.methodName = methodName;
}
public void doIt() {
if(className != null && methodName != null) {
invokeMethod();
}
}
private void invokeMethod() {
try {
Class c = Class.forName(className);
Method m = c.getMethod(methodName); //no parameters method
Object o = c.newInstance(); //no args constructor
m.invoke(o);
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
Circa l'utilità, qualcuno direbbe che senza meccanismi di questa risma un programma non sarebbe che l'ombra di un sistema orientato agli oggetti =). |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Jan 2006
Città: Agrigento
Messaggi: 18
|
Grazie mille....
però una cosa che non capisco è m.invoke(o); cosa fa ? Quali sono i parametri che passao al metodo ? (Ad esempio il metodo che registrerà l'utente ha bisogno di fue stringhe come parametri) Grazie |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Ma non puoi usare una semplice interfaccia con il tuo metodo?
Cosa devi fare di preciso?
__________________
|Java Base| |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
m.invoke(o);
è la versione riflessiva dell'espressione di invocazione di un metodo di nome m attraverso il riferimento o: o.nomeMetodo(); Per intero, invoke è: invoke(Object riferimento, Object... valori_per_i_parametri_del_metodo) dove ogni valore nel parametro variabile (...) è di un tipo compatibile in assegnamento con i parametri formali del metodo m, determinati all'atto dell'ispezione della classe: Method m = classe.getMethod(String nome, Class... tipi_parametri); |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
Quote:
prova a vedere se questo design ti può servire: Codice:
public interface Command{
public void execute();
}
public class MyClass{
private Command myCommand;
...
public void registerCommand(Command command){
myCommand=command;
}
public void do(){
....
myCommand.execute();
...
}
}
class FirstCommand implements Command{
void execute(){
//prima implementazione di command
...
}
}
class SecondCommand implements Command{
void execute(){
//seconda implementazione di command
...
}
}
...
class CommandFactory{
private CommandFactory(){}
public static Command createCommand(int commandChoosed){
switch(commandChoosed){
case 1:
return new FirstCommand();
break;
...
}
return null;
}
}
ciau Ultima modifica di The3DProgrammer : 15-07-2006 alle 12:19. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:17.











|








