[Java] Encapsulation

Qu'est-ce que l'encapsulation?

Modificateur d'accès

Autorisations de champ

//Mauvais exemple
public class Person {
  public String name;
  public int age;

  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String show(){
    return String.format("%s(%d ans)\n", this.name, this.age);
  }
}

Méthode d'accesseur

public class Person {
  //Le champ est privé
  private String name;
  private int age;

  //getter dans le champ de nom
  public String getName() {
    return this.name;
  }
  //setter de champ de nom
  public void setName(String name) {
    this.name = name;
  }
  //getter de champ d'âge
  public int getAge() {
    return this.age;
  }
  //régleur de champ d'âge
  public void setAge(int age) {
    if (age <= 0) {
      throw new IllegalArgumentException("Veuillez indiquer l'âge sous la forme d'un nombre positif.");
    }
    this.age = age;
  }

  public String show() {
    return String.format("%s(%ré).", getName(), getAge());
  }
}
public class AccessorBasic {

  public static void main(String[] args) {
    var p = new Person();
    p.setName("Ichiro");
    p.setAge(47);
    System.out.println(p.show()); //Je suis Ichiro (47 ans).
    p.setAge(-30);  //Erreur
  }
}

Classe immuable

//Déclarez la classe elle-même définitive et ne l'étendez pas
public final class Person {
  //Toute finale privée (réaffectation interdite)
  private final String name;
  private final int age;

  //Initialiser le champ final privé dans le constructeur
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  //Getter
  public String getName() {
    return this.name;
  }

  public int getAge() {
    return this.age;
  }
}
public class ImmutableBasic {
  public static void main(String[] args) {
    var p = new Person("Satoshi", 10);
    System.out.println(p.getName()); //Satoshi
  }
}
import java.util.Date;

public final class Person {
  private final String name;
  private final int age;
  private final Date birth;

  public Person(String name, int age, Date birth) {
    this.name = name;
    this.age = age;
    this.birth = birth;
  }

  public String getName() {
    return this.name;
  }

  public int getAge() {
    return this.age;
  }
  
  public Date getBirth() {
    return this.birth;
  }
}
//Exemple de modification de la valeur transmise à l'instance ultérieurement
import java.util.Date;
public class Main {
  public static void main(String[] args) {
    var birth = new Date();
    var p = new Person("Satoshi", 10, birth);
    System.out.println(p.getBirth());  //Tue Nov 03 11:26:33 UTC 2020
    //Mettre à jour l'objet passé lors de l'instanciation
    birth.setDate(15);
    System.out.println(p.getBirth());  //Sun Nov 15 11:26:33 UTC 2020

//Exemple de modification de la valeur obtenue à partir de l'instance
//    var p = new Person("Satoshi", 10, new Date());
//    System.out.println(p.getBirth());  //Tue Nov 03 11:29:05 UTC 2020
//    var birth = p.getBirth();
//
//    birth.setDate(15);
//    System.out.println(p.getBirth());  //Sun Nov 15 11:29:05 UTC 2020
  }
}   

Comment empêcher l'immuabilité de se rompre

//Naissance de l'argument constructeur,Obtenez la valeur d'horodatage du champ de naissance avec la méthode getTme et créez un nouvel objet
import java.util.Date;

public final class Person {
  private final String name;
  private final int age;
  private final Date birth;

  public Person(String name, int age, Date birth) {
    this.name = name;
    this.age = age;
    //Copie défensive
    this.birth = new Date(birth.getTime());
  }

  public String getName() {
    return this.name;
  }

  public int getAge() {
    return this.age;
  }

  public Date getBirth() {
    //Copie défensive
    return new Date(this.birth.getTime());
  }
}

Recommended Posts

java (encapsulation)
[Java] Encapsulation
Qu'est-ce que l'encapsulation Java?
Java
Encapsulation
Java
À propos de l'encapsulation Java Private Public
Encapsulation Java et getters et setters
Apprendre Java (0)
Étudier Java ―― 3
Java protégé
[Java] Annotation
Module [Java]
Tableau Java
Étudier Java ―― 9
Java scratch scratch
Astuces Java, astuces
Méthodes Java
Méthode Java
java (constructeur)
Tableau Java
[Java] ArrayDeque
java (remplacement)
Journée Java 2018
Chaîne Java
java (tableau)
Java statique
Sérialisation Java
java débutant 4
JAVA payé
Étudier Java ―― 4
Java (ensemble)
tri shell java
[Java] compareTo
Étudier Java -5
java (interface)
Mémorandum Java
Tableau Java
Étudier Java ―― 1
[Java] Array
[Java] Polymorphisme
Étudier Java # 0
framework java
Fonctionnalités Java
[Java] Héritage
FastScanner Java
Fonctionnalités Java
java débutant 3
Mémo Java
Héritage Java
Les bases de Java
Décompiler Java
[Java] Annotation
note java
Revue d'encapsulation
java débutant
Java (add2)
JAVA (Carte)
interface [java]
Collection Java9