Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Passaggio di array a costruttore

    salve,
    ho questa classe:
    codice:
    class ListTool extends JList {
            String[][] items;
            
            public ListTool(String[][] elements){
                super(elements[0]);
                this.items=elements;
            }
            public String getToolTipText(MouseEvent evt) {
                return items[1][locationToIndex(evt.getPoint())];
            }
    }
    siccome l'array passato al costruttore viene salvato in "items" all'interno dell'oggetto istanziato, vorrei poter fare una cosa del genere:
    codice:
    ListTool jList3 = new ListTool({{"A", "B", "C", "D"},{"a", "b", "c", "d"}});
    ma mi da errore, come posso fare per evitare di usare un'altro array ? cioè vorrei evitare di dover fare così:
    codice:
    String[][] item = {{"A", "B", "C", "D"},{"a", "b", "c", "d"}};
            ListTool jList3 = new ListTool(item);

    GRAZIE

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

    Re: Passaggio di array a costruttore

    Originariamente inviato da skonvols2k
    vorrei poter fare una cosa del genere:
    codice:
    ListTool jList3 = new ListTool({{"A", "B", "C", "D"},{"a", "b", "c", "d"}});
    ma mi da errore
    Non è la sintassi corretta. Come farebbe il compilatore a capire di quale tipo è l'array? Appunto. Si deve creare quello che si chiama un "anonymous array".

    codice:
    ListTool jList3 = new ListTool( new String[][] {{"A", "B", "C", "D"},{"a", "b", "c", "d"}} );
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Re: Re: Passaggio di array a costruttore

    Originariamente inviato da andbin
    Non è la sintassi corretta. Come farebbe il compilatore a capire di quale tipo è l'array? Appunto. Si deve creare quello che si chiama un "anonymous array".

    codice:
    ListTool jList3 = new ListTool( new String[][] {{"A", "B", "C", "D"},{"a", "b", "c", "d"}} );
    grazie per la risposta velocissima !

    scusa ma questo anonymous array rimane in memoria o no?

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

    Re: Re: Re: Passaggio di array a costruttore

    Originariamente inviato da skonvols2k
    scusa ma questo anonymous array rimane in memoria o no?
    Come per tutti gli altri oggetti, solo quando l'oggetto non è più raggiungibile da alcun "live" thread, allora sarà eleggibile per il gc (garbage collection).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5

    Re: Re: Re: Re: Passaggio di array a costruttore

    Originariamente inviato da andbin
    Come per tutti gli altri oggetti, solo quando l'oggetto non è più raggiungibile da alcun "live" thread, allora sarà eleggibile per il gc (garbage collection).
    e quindi ?

    scusami ma non ho capito :master:

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

    Re: Re: Re: Re: Re: Passaggio di array a costruttore

    Originariamente inviato da skonvols2k
    e quindi ?

    scusami ma non ho capito :master:
    Hai istanziato un nuovo array e lo passi al costruttore di ListTool. Nel suo costruttore fai una cosa molto semplice: assegni il reference dell'array ad un campo di istanza. In pratica l'array è referenziato dall'oggetto ListTool.

    Fino a quando quest'oggetto ListTool che hai istanziato sarà referenziato, allora pure l'array resterà in vita.

    Quella variabile jList3 tiene il reference all'oggetto ListTool, finché lo terrai referenziato, sia ListTool che gli oggetti a sua volta referenziati (l'array e il suo contenuto) resteranno in vita.

    Se jList3 è una variabile locale di un metodo, se non lo assegni da qualche altra parte, una volta terminato il metodo, allora la variabile sparisce e se appunto l'oggetto ListTool non è più referenziato, allora sarà eleggibile per il gc. Dato che ListTool è un JList, immagino che tu lo metta dentro un altro componente prima di terminare il metodo (es. JPanel), in quel caso continuerà ad essere "vivo".

    Insomma... solo quando nessun "live" thread riuscirà più a raggiungere l'oggetto, allora sarà eleggibile per il gc.
    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,328
    Aggiungo un'informazione, che forse non è chiara per l'autore del post.

    Eleggibile per il gc significa che è "candidato per essere rimosso dalla memoria".

    GC è l'acronimo di GarbageCollector, un "componente" della JVM che si occupa di fare pulizia di tutti gli oggetti che non servono più e che sono, appunto, destinati ad essere rimossi dalla memoria. Un oggetto diventa "eleggibile" (ovvero, candidato per essere rimosso) quando non esiste più alcun riferimento ad esso.


    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
    però la mia preoccupazione era un'altra: tra l'array anonimo e l'array nell'oggetto saranno tutti e 2 in memoria ? ciò avrò 2 copie dello stesso array? o quello nell'oggetto sarà una sorta di "puntatore" (scusa la terminologia ma vengo dal C).
    No perchè devo inserire stringhe molto lunge e ciò mi preoccupa.
    Considera che jList3 è una lista nell'interfaccia grafica sempre visibile per tutta la vita del programma.

    Grazie ancora

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da skonvols2k
    però la mia preoccupazione era un'altra: tra l'array anonimo e l'array nell'oggetto saranno tutti e 2 in memoria ? ciò avrò 2 copie dello stesso array?
    Non ci saranno 2 array .... solo 1. È il reference che può essere "copiato" assegnandolo ad altre variabili.

    Originariamente inviato da skonvols2k
    o quello nell'oggetto sarà una sorta di "puntatore" (scusa la terminologia ma vengo dal C).
    Sì ... il concetto è quello. Il reference che ottieni da un 'new' lo puoi paragonare ad un puntatore.

    Originariamente inviato da skonvols2k
    No perchè devo inserire stringhe molto lunge e ciò mi preoccupa.
    Se le stringhe sono "literal" (scritte nel sorgente) allora sappi che non sono mai eleggibili per il gc.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Perfettooooooo.
    Grazie grazie grazie.

    P.S.

    se dovesse servire a qlc la classe nel primo post crea JList con tooltip per singoli elementi.

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.