English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

不可变对象的所有属性都需要在Java中是最终的吗?

Le classi/oggetti immutabili non possono modificare i loro valori. Ad esempio, le stringhe sono immutabili in Java, il che significa che una volta create una stringa in Java, non è possibile modificarla. Anche se tenti di modificarla, creerai una stringa intermedia modificata e assegnarla al testo originale.

Definire oggetti immutabili

Ogni volta che è necessario creare un oggetto che non può essere modificato dopo l'inizializzazione, si possono definire oggetti immutabili. Non ci sono regole specifiche per creare oggetti immutabili, l'idea è limitare l'accesso ai campi della classe dopo l'inizializzazione.

Esempio

Il seguente programma Java dimostra la creazione di una classe finale. Qui, abbiamo due variabili di istanza nome e età, tranne per il costruttore che non può assegnare loro valori.

final public class Student {
   private final String name;
   private final int age;
   public Student(String name, int age) {
      this.name = name;
      this.age = age;
   }
   public String getName() {
      return this.name;
   }
   public int getAge() {
      return this.age;
   }
   public static void main(String[] args) {
      Student std = new Student("Krishna", 29);
      System.out.println(std.getName());
      System.out.println(std.getAge());
   }
}

Risultato di output

Krishna
29

È necessario dichiarare tutte le variabili come final?

No, non tutte le proprietà devono avere l'attributo finale per creare oggetti immutabili. In un oggetto immutabile, non dovresti permettere agli utenti di modificare le variabili della classe.

Puoi farlo modificando le variabili in private e non fornendo un metodo di impostazione per farle, in questo modo.

Esempio

public class Sample {
   String name;
   int age;
   public Sample() {
      this.name = name;
      this.age = age;
   }
   public String getName() {
      return this.name;
   }
   public int getAge() {
      return this.age;
   }
}