Maison  >  Article  >  Java  >  Classe immuable en Java

Classe immuable en Java

WBOY
WBOYoriginal
2024-08-30 16:07:181148parcourir

Dans cet article, nous expliquerons la classe immuable en Java. Nous verrons également les utilisations de la classe immuable. Il y aura des exemples de code Java montrant comment une classe immuable peut être créée en Java. Une classe immuable est une classe dont le contenu ne peut pas être modifié.

Voici quelques points importants concernant la classe immuable :

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

  • Les objets d'une classe immuable sont appelés objets immuables. Lorsqu’il s’agit d’objets immuables, nous ne sommes pas autorisés à modifier l’état d’un objet après sa création. Chaque fois que l'état d'un objet est modifié, nous obtenons un nouvel objet.
  • Les classes immuables ne fournissent aucune méthode pour modifier leur contenu.
  • Dans les classes Immuables, seules les méthodes getter sont disponibles et non les méthodes setter.
  • Les classes immuables sont par défaut de nature thread-safe.
  • Les classes héritées Java, les classes wrapper, la classe String, sont des exemples de classes immuables en Java.

Comment utiliser une classe immuable en Java ?

Avant d'utiliser cette classe, il est important de savoir comment est créée une classe immuable. Voici les points importants à garder à l’esprit lors de la création de la classe :

  • Une classe immuable doit être définitive car elle ne doit pas être héritée.
  • Tous les champs d'une classe immuable doivent être rendus définitifs.
  • Si un objet mutable est utilisé comme champ dans une classe immuable, alors un traitement spécial doit être implémenté afin d'empêcher que son contenu ne soit modifié.
  • Un constructeur public doit être présent.
  • Les méthodes Getter pour toutes les variables doivent être définies.
  • Les méthodes Setter ne doivent être présentes pour aucune variable.

Voici les principales utilisations des classes immuables en Java :

  • Simplicité : Puisque dans le cas d'une classe immuable, chaque classe est dans un seul état ; il s'agit donc d'un modèle de conception simple.
  • Thread Safe : Un autre avantage de la classe immuable survient dans le cas d'un environnement multithread où aucune synchronisation n'est requise en raison de la nature thread-safe de la classe immuable.
  • Conception robuste : L'écriture de classes immuables dans une application aboutit à un code robuste.

Outre les avantages répertoriés, il peut y avoir des problèmes de performances lors de l'utilisation de classes immuables. Par conséquent, lorsque la sécurité des threads et d’autres fonctionnalités ne sont pas importantes, nous pouvons envisager d’utiliser des classes mutables pour améliorer les performances.

Exemples de classe immuable en Java

Voici les exemples mentionnés :

Exemple n°1 – Création d'une classe immuable

Nous allons maintenant voir des exemples de code Java montrant la création de classes immuables en Java. Voici un exemple de code Java montrant comment les classes immuables sont créées en Java :

Code :

package com.edubca.immutabledemo;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
public ImmutableDemo  (String studentName, int rollNumber) {
this.studentName = studentName;
this.rollNumber = rollNumber;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public static void main(String[] args) {
ImmutableDemo obj = new ImmutableDemo  ("John" , 100);
// Since no getters are available contents cannot be modified.
// Also as variables are declared final they cannot be modified
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
}
}

Sortie :

Classe immuable en Java

Le code ci-dessus montre la création d'une classe immuable qui ne contient aucun objet mutable en tant que membre de la classe.

Exemple n°2 – Exemple de classe immuable en Java

Nous allons maintenant voir comment créer des classes immuables ayant des objets mutables comme membres. Une manipulation particulière est nécessaire afin de maintenir l'immuabilité dans ce cas.

Problème avec un objet mutable dans une classe immuable :

Voici un exemple de code normal montrant la création d'une classe immuable contenant des membres mutables :

Code :

package com.edubca.immutabledemo;
import java.util.Date;
import java.text.SimpleDateFormat;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
final Date birthDate;
public ImmutableDemo  (String studentName, int rollNumber, Date birthDate) {
this.studentName = studentName;
this.rollNumber = rollNumber;
this.birthDate=birthDate;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public Date getBirthDate() {
return birthDate;
}
public static void main(String[] args) throws Exception {
String birthDate= "31/09/1997";
ImmutableDemo obj = new ImmutableDemo  ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate));
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
obj.getBirthDate().setTime(1000);
System.out.println("After changing birth date>>>>>>>>>>>>");
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
}
}

Sortie :

Classe immuable en Java

À partir du résultat ci-dessus, nous pouvons voir que le contenu de l'objet a été modifié puisque la date de naissance a été modifiée. Cela enfreint les règles de la classe immuable.

La solution au problème avec un objet mutable dans une classe immuable :

Afin de gérer de tels cas, certaines modifications doivent être implémentées dans le code. Dans le code modifié, lors du renvoi d'objets mutables à partir de la méthode d'obtention, nous ne renvoyons pas l'objet d'origine ; nous renvoyons plutôt le clone de l'objet. Par conséquent, les modifications apportées aux objets clonés n'ont aucun effet sur l'objet d'origine. Voici le code modifié :

Code :

package com.edubca.immutabledemo;
import java.util.Date;
import java.text.SimpleDateFormat;
public final class ImmutableDemo {
final String studentName;
final int rollNumber;
final Date birthDate;
public ImmutableDemo  (String studentName, int rollNumber, Date birthDate) {
this.studentName = studentName;
this.rollNumber = rollNumber;
this.birthDate=birthDate;
}
public String getStudentName() {
return studentName;
}
public int getRollNumber() {
return rollNumber;
}
public Date getBirthDate() {
return (Date)birthDate.clone();
}
public static void main(String[] args) throws Exception {
String birthDate= "31/09/1997";
ImmutableDemo obj = new ImmutableDemo  ("John" , 100, new SimpleDateFormat("dd/MM/yyyy").parse(birthDate));
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
obj.getBirthDate().setTime(1000);
System.out.println("After changing birth date>>>>>>>>>>>>");
System.out.println("Name is " + obj.getStudentName());
System.out.println("Roll Number is " + obj.getRollNumber());
System.out.println("Birth date is " + obj.getBirthDate());
}
}

Sortie :

Classe immuable en Java

À partir du résultat ci-dessus, nous ne pouvons voir aucun changement dans la valeur de la date ; par conséquent, l’immuabilité de la classe reste intacte. 

Conclusion

D'après la discussion ci-dessus, nous avons une compréhension claire des classes immuables Java. Aussi, nous en avons vu les avantages.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Classes d'adaptateur JavaArticle suivant:Classes d'adaptateur Java