Ciao! Come posso creare delle variabili in runtime?
ad esempio:
Object a = new Object();
vorrei fare così:
int a.intero = 23;
Ma il compilatore dice che si aspetta il punto e virgola.
Help.
Ciao! Come posso creare delle variabili in runtime?
ad esempio:
Object a = new Object();
vorrei fare così:
int a.intero = 23;
Ma il compilatore dice che si aspetta il punto e virgola.
Help.
Se la tua idea era quella di voler creare dinamicamente a runtime, in modo arbitrario, una variabile di istanza all'interno di un qualunque oggetto .... beh, non è possibile.Originariamente inviato da Neocron
Ciao! Come posso creare delle variabili in runtime?
ad esempio:
Object a = new Object();
vorrei fare così:
int a.intero = 23;
Ma il compilatore dice che si aspetta il punto e virgola.
Una variabile di istanza (come qualunque altro elemento di una classe) va specificata e dichiarata nel codice sorgente.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
grazie della risposta.
il mio problema è il sapere come potermi riferire a variabili fuori i listeners, es.
Come faccio a prendere oggetti al di fuori del listener?codice:int a = 5; c = new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(a); } }; b.addActionListener(c);
E cosa c'entra con la creazione di variabili a runtime che avevi chiesto???Originariamente inviato da Neocron
il mio problema è il sapere come potermi riferire a variabili fuori i listeners, es.
Come faccio a prendere oggetti al di fuori del listener?codice:int a = 5; c = new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(a); } }; b.addActionListener(c);![]()
Comunque rispondo anche a questa tua domanda: se il codice che hai appena scritto è un pezzo di codice all'interno di un metodo (e quindi 'a' è una variabile locale del metodo) allora ... non è possibile accedere ad 'a' dall'interno della inner-class anonima.
Se ti stai chiedendo il perché ... pensaci ... se il metodo termina, cosa succede alla variabile 'a'???![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Avevo fatto quella domanda per creare una cosa del genere:
Visto che sei saggio, come potrei risolvere il problema?codice:int c.a = 5; c = new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(a); } }; b.addActionListener(c);
Io genero dinamicamente i componenti con necessità del listener, come posso fare?
Per cominciare il codice che hai postato non ha molto senso ... int c.a non è corretto e poi fai c = new ActionListener ....Originariamente inviato da Neocron
Avevo fatto quella domanda per creare una cosa del genere:
Visto che sei saggio, come potrei risolvere il problema?codice:int c.a = 5; c = new ActionListener(){ public void actionPerformed(ActionEvent e) { System.out.println(a); } }; b.addActionListener(c);
Io genero dinamicamente i componenti con necessità del listener, come posso fare?
Se vuoi accedere, dall'interno di un metodo di un listener, a delle variabili di istanza (occhio, non variabili locali nei metodi!!) della classe, è possibile ... ma non con una inner-class anonima locale ad un metodo!
Se hai una classe MiaClasse, basta che implementi, a livello della classe, l'interfaccia ActionListener e poi fai b.addActionListener(this).
Quando sei "dentro" il metodo actionPerformed, sei dentro alla classe e quindi puoi accedere a tutte le variabili di istanza.
Una cosa del tipo:
Ovviamente non so se ti va bene come soluzione.codice:public class MiaClasse implements ActionListener { private int a = 5; ....bla...bla.... public void actionPerformed(ActionEvent e) { System.out.println(a); // OK, 'a' e` visibile! } }![]()
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Altra soluzione consiste nell'utilizzare un metodo della classe per far fare al tuo listener quel che gli paer con le variabili d'istanza:
Altra soluzione ancora consiste nel passare al tuo Listener un riferimento alla variabile che intendi fargli utilizzare. In questo caso devi scrivere una classe che implementa il Listener che ti serve. Quindi istanzi un oggetto di tale classe passando (al costruttore, ad esempio) il riferimento all'oggetto.codice:public class TuaClasse { private int a; ... public void tuoMetodo() { tuoOggetto.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { metodoRichiamato(); } }); } ... public void metodoRichiamato() { // Fai quel che vuoi con 'a' } }
Ecco l'esempio:
La terza soluzione consiste nel passare all'ascoltatore (implementato come classe a se stante) un riferimento alla classe che contiene l'oggetto che viene monitorato. In questo caso, predisponi nella classe (chiamiamola "principale") dei metodi per poter accedere alla variabile/oggetto che il tuo listener deve manipolare.codice:public class MioAscoltatore implements ActionListener { private int var; public MioAscoltatore(int var) { this.var = var; } public void actionPerformed(ActionEvent ae) { // Utilizza var } } ... public void tuoMetodo() { tuoOggetto.addActionListener( new MioAscoltatore(a) ); }
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Grazie infinite! Ho usato la seconda soluzione, grazie ancora![]()