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

    Usare due costruttori allo stesso tempo

    Buongiorno, ammetto che la domanda è un tantino generica, ma proverò a farmi capire con un esempio.
    Io ho questa classe:
    codice:
    public abstract class SoluzioneAbitativa {
    
        public static final int COSTO_FISSO = 100;
    
    
        private int numero;
        private int metriQuadri;
        private int maxOccupanti;
        private boolean libera;
        private int numeroOccupanti;
        private String intestatario;
        private ArrayList<Servizio> servizi = new ArrayList<>();
        private int costo;
    
    
        public SoluzioneAbitativa(int numero, int metriQuadri, int maxOccupanti) {
            this.numero = numero;
            this.metriQuadri = metriQuadri;
            this.maxOccupanti = maxOccupanti;
            this.numeroOccupanti = 0;
            this.intestatario = null;
            this.libera = true;
        }
    
    
        public ArrayList<Servizio> getServizi() {
            return servizi;
        }
    
    
        public void setServizi(ArrayList<Servizio> servizi) {
            this.servizi = servizi;
        }
    
    
        public int getNumero() {
            return numero;
        }
    
    
        public int getMetriQuadri() {
            return metriQuadri;
        }
    
    
        public int getMaxOccupanti() {
            return maxOccupanti;
        }
    
    
        public boolean isLibera() {
            if (this.numeroOccupanti == 0) {
                libera = true;
            } else {
                libera = false;
            }
            return libera;
        }
    
    
        public int getNumeroOccupanti() {
            return numeroOccupanti;
        }
    
    
        public String getIntestatario() {
            return intestatario;
        }
    
    
        public void setMaxOccupanti(int maxOccupanti) {
            this.maxOccupanti = maxOccupanti;
        }
    
    
        public void setLibera(boolean libera) {
            this.libera = libera;
        }
    
    
        public void setNumeroOccupanti(int numeroOccupanti) {
            this.numeroOccupanti = numeroOccupanti;
        }
    
    
        public void setIntestatario(String intestatario) {
            this.intestatario = intestatario;
        }
    
    
        public int getCosto() {
            return costo;
        }
    
    
        public void setCosto(int costo) {
            this.costo = costo;
        }
    
    
        public abstract void calcolaCosto();
    
    
        public void modificaOccupanti(int nuovoNumero) {
            if (getMaxOccupanti() >= nuovoNumero) {
                setNumeroOccupanti(nuovoNumero);
            } else {
                try {
                    throw new Exception("Troppi occupanti");
                } catch (Exception ex) {
                    setNumeroOccupanti(getMaxOccupanti());
                }
            }
    
    
        }
    }
    che rappresenta, che so, una camera d'albergo. Ora, io la instanzio specificando quanto c'è nel costruttore a partire da un file (quindi le informazioni iniziali le ho). Però poi ho necessità di instanziarla a partire dal solo numero (in stile albergo insomma). Come faccio? Ho provato a usare this(...), ma ho creato solo confusione. Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    Ora, io la instanzio specificando quanto c'è nel costruttore a partire da un file (quindi le informazioni iniziali le ho). Però poi ho necessità di instanziarla a partire dal solo numero (in stile albergo insomma). Come faccio? Ho provato a usare this(...), ma ho creato solo confusione. Grazie
    Una classe può avere più costruttori. Se ne ha di più semplicemente è perchè chi ha scritto la classe vuole offrire più modi diversi per costruire 1 oggetto di quella classe, magari permettendo di passare più o meno dati a seconda del costruttore. Alla fin fine si tratta solo di un principio di "flessibilità".

    Prendi per esempio la classe java.awt.Color. Ha svariati costruttori:

    public Color(float r, float g, float b)
    public Color(float r, float g, float b, float a)
    public Color(int r, int g, int b)
    public Color(int r, int g, int b, int a)

    ....e altri....

    Pertanto puoi costruire un oggetto Color scegliendo il costruttore che riceve i dati che hai a disposizione, con alpha se ce l'hai o senza alpha, ecc...

    Poi all'interno di un costruttore, come PRIMA istruzione è lecito invocare un altro costruttore della stessa classe. Questo lo si fa per riutilizzare il codice di un altro costruttore evitando ripetizioni.

    Sempre in Color viene fatto:

    codice:
        public Color(int r, int g, int b) {
            this(r, g, b, 255);
        }

    Ovvero il costruttore che riceve r/g/b passa la palla all'altro costruttore

    public Color(int r, int g, int b, int a)

    passando 255 come a (alpha). Così si riutilizza il codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Ok, ma il mio discorso era un altro, provo a rispiegarlo: io ho un file, mettiamo costruito così come di seguito.
    codice:
    numero[TAB]tipologia[TAB]MetriQuadri[TAB]MassimoNumeroOccupanti
    lo leggo e creo un oggetto di SoluzioneAbitativa con il costruttore della classe. Poi ho bisogno di recuperare i dati solo mediante il numero (ovvero passando il numero ottenere i metri e il numeroOccupanti corrispondenti). È possibile una cosa del genere? Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    Ok, ma il mio discorso era un altro
    Pensavo che i tuoi dubbi fossero sui concetti dei costruttori e ho fatto la spiegazione generale .... male non fa.

    Quote Originariamente inviata da luca93abc Visualizza il messaggio
    io ho un file, mettiamo costruito così come di seguito.
    codice:
    numero[TAB]tipologia[TAB]MetriQuadri[TAB]MassimoNumeroOccupanti
    lo leggo e creo un oggetto di SoluzioneAbitativa con il costruttore della classe. Poi ho bisogno di recuperare i dati solo mediante il numero (ovvero passando il numero ottenere i metri e il numeroOccupanti corrispondenti). È possibile una cosa del genere?
    Certo che è possibile ma ... i costruttori non c'entrano nulla.
    L'oggetto lo hai già creato e vuoi ri-trovarlo in base a certi dati? Allora questo presuppone che tutti gli oggetti SoluzioneAbitativa che hai creato siano in una struttura dati che ti permetta di riottenere facilmente quel certo oggetto a fronte di un certo dato, un ID o qualcos'altro.

    Quel numero è unico? Se sì userai una mappa (Map) che associa i numeri agli oggetti. Quindi la questione/argomento è: strutture dati (non costruttori)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.