Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Neocron
    Registrato dal
    Jul 2002
    Messaggi
    524

    Crere nuove variabili partendo da un riferimento

    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.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Crere nuove variabili partendo da un riferimento

    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.
    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.

    Una variabile di istanza (come qualunque altro elemento di una classe) va specificata e dichiarata nel codice sorgente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Neocron
    Registrato dal
    Jul 2002
    Messaggi
    524
    grazie della risposta.

    il mio problema è il sapere come potermi riferire a variabili fuori i listeners, es.

    codice:
    int a = 5;
    c = new ActionListener(){
       public void actionPerformed(ActionEvent e) { 
    	System.out.println(a); 
       }
    };
    b.addActionListener(c);
    Come faccio a prendere oggetti al di fuori del listener?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Neocron
    il mio problema è il sapere come potermi riferire a variabili fuori i listeners, es.

    codice:
    int a = 5;
    c = new ActionListener(){
       public void actionPerformed(ActionEvent e) { 
    	System.out.println(a); 
       }
    };
    b.addActionListener(c);
    Come faccio a prendere oggetti al di fuori del listener?
    E cosa c'entra con la creazione di variabili a runtime che avevi chiesto???

    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Neocron
    Registrato dal
    Jul 2002
    Messaggi
    524
    Avevo fatto quella domanda per creare una cosa del genere:

    codice:
    int c.a = 5;
    c = new ActionListener(){
       public void actionPerformed(ActionEvent e) { 
    	System.out.println(a); 
       }
    };
    b.addActionListener(c);
    Visto che sei saggio, come potrei risolvere il problema?

    Io genero dinamicamente i componenti con necessità del listener, come posso fare?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Neocron
    Avevo fatto quella domanda per creare una cosa del genere:

    codice:
    int c.a = 5;
    c = new ActionListener(){
       public void actionPerformed(ActionEvent e) { 
    	System.out.println(a); 
       }
    };
    b.addActionListener(c);
    Visto che sei saggio, come potrei risolvere il problema?

    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 ....

    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:
    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!
        }
    }
    Ovviamente non so se ti va bene come soluzione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Altra soluzione consiste nell'utilizzare un metodo della classe per far fare al tuo listener quel che gli paer con le variabili d'istanza:
    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'
       }
    }
    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.
    Ecco l'esempio:
    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) );
    }
    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.


    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

  8. #8
    Utente di HTML.it L'avatar di Neocron
    Registrato dal
    Jul 2002
    Messaggi
    524
    Grazie infinite! Ho usato la seconda soluzione, grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.