Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Classi immutabili

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2014
    Messaggi
    178

    Classi immutabili

    Salve,

    come si fa a rendere una classe immutabile?

    ad esempio:

    codice:
    public class Persona 
    {
    
    private String nome;
    private String cognome;
    
    public Persona(String nome, String cognome)
    {
       this.nome = nome;
       this.cognome = cognome;
    }
    
    public void setNome(String nome)
    {
       this.nome = nome;
    }
    
    public void setCognome(String cognome)
    {
    this.cognome = cognome;
    }
    
    public String getNome()
    {
    return this.nome;
    }
    
    public String getCognome()
    {
    return this.cognome;
    }
    ora la classe Persona come faccio a trasformarla in una classe immutabile?.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    come si fa a rendere una classe immutabile?
    Una classe definisce oggetti "immutabili" quando lo stato dell'oggetto non può più essere modificato dopo che l'oggetto è stato creato. Per essere più precisi/pignoli, dall'esterno l'oggetto non deve "mostrare" alcun cambiamento di stato. Infatti l'oggetto internamente potrebbe anche avere dello stato mutabile (caso eccellente: String che è immutabile ma il campo hash è calcolato on-demand la prima volta che hashCode() è invocato, quindi questo è mutabile ma questo aspetto non traspare all'esterno).

    Quindi: niente metodi che cambiano lo stato, nessun metodo "setter". Campi non visibili all'esterno e possibilmente final (non è tanto il final che forza la immutabilità di per sé ma aiuta su aspetti legati al threading).

    E se vogliamo andare oltre: classe final, cosa che perlomeno evita che qualcuno la estenda aggiungendo stato mutabile.
    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
    Registrato dal
    Jul 2014
    Messaggi
    178
    vediamo se ho capito


    codice:
    public final class Persona 
    {
    
    final private String nome;
    final private String cognome;
    
    public Persona(String nome,String cognome)
    {
       this.nome = nome;
       this.cognome = cognome;
    }
    
    
    public String getNome()
    {
    return this.nome;
    }
    
    public String getCognome()
    {
    return this.cognome;
    }


    credo sia giusta

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Bombonera Visualizza il messaggio
    credo sia giusta[/COLOR]
    Sì corretto


    P.S. convenzionalmente si mette prima il livello di accesso: private final
    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
    Registrato dal
    Jul 2014
    Messaggi
    178
    grazie andBin sei il migliore

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.