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

    [java] Estensione dei records?

    Buongiorno a tutti,
    Siccome i records non si possono estendere in Java, ho pensato a questa soluzione, quando vi sono molti metodi da registrare:
    codice:
    public class LearnRecord {
    
        public static void main(String args[]){
        
            
            Luogo luogo = new Luogo("Roma", "Via del Castello");
            
            Magazzino magazzino = new Magazzino("Firenze", "Via Roma", "Discount");
            
            System.out.println(luogo.registro.paese());
            
            System.out.println(magazzino.registro.nome());            
                    
                                       
        }        
    
    }
    
    class Luogo {
    
        public Registro registro;
    
        Luogo(String paese, String indirizzo){
        
            registro = new Registro(paese, indirizzo);
            
        }
        
        public record Registro(String paese, String indirizzo){};    
            
    }
    
    class Magazzino extends Luogo {
        
        public Registro registro;
    
        Magazzino(String paese, String indirizzo){
            
            super(paese, indirizzo);
            
        }    
        
        Magazzino(String paese, String indirizzo, String nome){
        
            super(paese, indirizzo);
            
            registro = new Registro(paese, indirizzo, nome);
            
        }    
        
        public record Registro(String paese, String indirizzo, String nome){};
            
    }

    Ovvero creare un istanza di un record in una classe che ad esempio potra' in segutio essere estesa.
    Vi sono soluzioni migliore?

    Ha senso?
    Ultima modifica di jabjoint; 11-09-2022 a 12:43
    jabjoint

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,228
    Quote Originariamente inviata da jabjoint Visualizza il messaggio
    Buongiorno a tutti,
    Ha senso?
    No, non ha proprio senso scritto così.
    Andrea • andbin.dev
    Senior Java developerSCJP 5 (91%) – SCWCD 5 (94%)

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, non ha proprio senso scritto così.
    Ciao andbin, e grazie per la puntualizzazione, senz'altro sincera.

    So di avere molte lacune, ci sto lavorando.

    Mi chiedevo come viene superata l'estenzione(extends) dei recors(classi?), per l'appunto senza istanziare sub-classi inutili come ho fatto io...
    Ultima modifica di jabjoint; 12-09-2022 a 17:45
    jabjoint

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,228
    Allora: il fatto che un magazzino è un luogo, sì, linguisticamente ci sta. Ma questa estensione mi pare comunque un po' forzata.

    Sarebbe meglio fare es. una classe (anche come record, volendo) che rappresenta un indirizzo:
    codice:
    public record Indirizzo(String indirizzo, String paese /*altro eventuale*/ ) { }

    poi siccome un Magazzino ha un indirizzo (attenzione, NON è un indirizzo), si usa la "composizione", ovvero:
    codice:
    public class Magazzino {
        private Indirizzo indirizzo;
    
        // ......
    }

    Se poi il magazzino dovesse gestire, per dire, 2 indirizzi (es. uno per l'accesso clienti e l'altro per i fornitori), basta tenere 2 campi Indirizzo.
    Andrea • andbin.dev
    Senior Java developerSCJP 5 (91%) – SCWCD 5 (94%)

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Allora: il fatto che un magazzino è un luogo, sì, linguisticamente ci sta. Ma questa estensione mi pare comunque un po' forzata.

    Sarebbe meglio fare es. una classe (anche come record, volendo) che rappresenta un indirizzo:
    codice:
    public record Indirizzo(String indirizzo, String paese /*altro eventuale*/ ) { }

    poi siccome un Magazzino ha un indirizzo (attenzione, NON è un indirizzo), si usa la "composizione", ovvero:
    codice:
    public class Magazzino {
        private Indirizzo indirizzo;
    
        // ......
    }

    Se poi il magazzino dovesse gestire, per dire, 2 indirizzi (es. uno per l'accesso clienti e l'altro per i fornitori), basta tenere 2 campi Indirizzo.
    Vero, molto più semplice.
    jabjoint

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 © 2022 vBulletin Solutions, Inc. All rights reserved.