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

    Problema con i costruttori

    Ciao a tutti

    Ho una domandina veloce sui costruttori, comincio a spiegarla direttamente dal codice sorgente:

    Siano A e B due classi con i relativi campi di esemplare (per A si ha un ArrayList, per B un array contenente ArrayList) e costruttori.

    codice:
    public class A{
        private ArrayList<X> listaX;
        
        public A(){
            listaX=new ArrayList<X>();
    }//A
    
    public class B{
        private listaX[] listaY;
    
        public B(int n){
            listaY=new listaX[n];
        }
    }//B


    Nel costruttore della classe B, cosa succede attraverso l'istruzione che ho appena fatto? Cosa contiene ogni "cella" dell'array? Essa contiene un riferimento ad un oggetto listaX già allocato o ancora da allocare? Se volessi che fosse allocato, dovrei gestire un ciclo for all'interno del costruttore di B che mi alloca ogni singolo riferimento a un oggetto listaX scorrendo l'array?

    Grazie, spero di essere stato chiaro

  2. #2
    Ogni elemento di un Array di oggetti deve essere allocato direttamente, quindi ciclo e "new".
    il new listaX[n] non fai altro che dire di conservare n posizioni in memoria per contenere i tuoi oggetti.

  3. #3
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Ogni elemento di un Array di oggetti deve essere allocato direttamente, quindi ciclo e "new".
    il new listaX[n] non fai altro che dire di conservare n posizioni in memoria per contenere i tuoi oggetti.
    Ok quindi è esatta la seguente istruzione?

    codice:
    //costruttore
    public B(int n){
        listaY=new listaX[n];
        for (int i=0; i<n; i++)
            listaY[i]=new A();
    }

  4. #4
    Se la classe "A" e dello stesso tipo dell'array o un suo sottotipo allora si.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Se la classe "A" e dello stesso tipo dell'array o un suo sottotipo allora si.
    Aggiungo: se la classe A è quella del primo post, allora no. Per come è scritto il codice del primo post, deve esistere una terza classe chiamata listaX (con la "L" minuscola).


    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

  6. #6
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Aggiungo: se la classe A è quella del primo post, allora no. Per come è scritto il codice del primo post, deve esistere una terza classe chiamata listaX (con la "L" minuscola).


    Ciao.
    Perché? listaX è un ArrayList campo di esemplare di un oggetto A

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da Giammarco18 Visualizza il messaggio
    Perché? listaX è un ArrayList campo di esemplare di un oggetto A
    No, per come hai scritto la classe B, listaX è un tipo (ovvero una classe).

    La dichiarazione (e istanziazione) di un array è la seguente:

    codice:
    Tipo[] nome = new Tipo[ num_elementi ];

    Tipo è ovviamente il nome di un tipo (primitivo) o di una classe.

    PS: cosa intendi per "campo di esemplare"?


    Ciao.
    Ultima modifica di LeleFT; 05-02-2015 a 12:22
    "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

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.