[Java] Classe d'objets

Qu'est-ce que la classe Object?

méthode toString

//Implémentation de la méthode toString dans la classe Person
public class Person {
  private String firstName;
  private String lastName;
  public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  @Override
  //Sélectionnez les champs qui caractérisent la classe et convertissez-les en chaînes
  public String toString() {
    return String.format("elle est,%s %s.",
        this.lastName, this.firstName);
  }
  //Rendez-le disponible pour les getters individuels
  public String getLastName() {
    return this.lastName;
  }
  public String getFirstName() {
    return this.firstName;
  }
}
public class ToStringBasic {
  public static void main(String[] args) {
    var p = new Person("Eilish", "Billie");
    System.out.println(p); //Elle est Billie Eilish.
  }
}

méthode égale

//firstName/Implémenter la méthode equals dans la classe Person du champ lastName
public class Person {
  private String firstName;
  private String lastName;

  public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  //Équivalent si le prénom et le nom sont égaux
  @Override
  public boolean equals(Object obj) {
    //Jugement d'identité
    if (this == obj) {
      return true;
    }
    //Jugement d'équivalence
    //Vérification de type avec instanceof et type cast(Abattu)
    if (obj instanceof Person) {
      var p  = (Person)obj;
      //Égalité de champ de juge(Méthode de la classe String Equals)
      return this.firstName.equals(p.firstName) &&
          this.lastName.equals(p.lastName);
    }
    //False si le type d'argument obj est différent
    return false;
  }
}

Règles à suivre avec égaux

//Code problématique qui viole la symétrie
public class BusinessPerson extends Person {
  private String department;

//Comparaison de département ajoutée
  public BusinessPerson(String firstName, String lastName, String department) {
    super(firstName, lastName);
    this.department = department;
  }

  @Override
  public boolean equals(Object obj) {
    //identité
    if (this == obj) {
      return true;
    }
    //Équivalence
    if (obj instanceof BusinessPerson) {
      var bp = (BusinessPerson)obj;
      return super.equals(bp) &&
          this.department.equals(bp.department);
    }
    return false;
  }
}
public class EqualsBasic {
  public static void main(String[] args) {
    var p = new Person("Yumi", "Matsutoya");
    var bp = new BusinessPerson("Yumi", "Matsutoya", "Compositeur");
    System.out.println(p.equals(bp));  //true
    System.out.println(bp.equals(p));  //false
  }
}
//Code problématique qui enfreint la transition
public class BusinessPerson extends Person {
  private String department;

  public BusinessPerson(String firstName, String lastName, String department) {
    super(firstName, lastName);
    this.department = department;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }

    if (obj instanceof Person) {
      //Pour le type BusinessPerson Comparer tous les champs
      if (obj instanceof BusinessPerson) {
        var bp  = (BusinessPerson)obj;
        return super.equals(bp) &&
            this.department.equals(bp.department);
      //Le type de personne ignore le champ de service et compare
      } else {
        return super.equals(obj);
      }
    }
    return false;
  }
}
public class EqualsBasic {
  public static void main(String[] args) {
    var p = new Person("Yumi", "Matsutoya");
    var bp1 = new BusinessPerson("Yumi", "Matsutoya", "Compositeur"); 
    var bp2 = new BusinessPerson("Yumi", "Matsutoya", "chanteur");
    System.out.println(bp1.equals(p)); //true
    System.out.println(p.equals(bp1)); //true
    System.out.println(p.equals(bp2)); //true
    System.out.println(bp1.equals(bp2)); //false Violation transitoire!
  }
}

Obtenir la valeur de hachage de l'objet

public class ObjectHash {
  private boolean boolValue;
  private int intValue;
  private long longValue;
  private float floatValue;
  private double doubleValue;
  private String stringValue;
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;

    //Le calcul suivant utilisant la valeur de hachage
    //hash = result*31^(n) + v_1*31^(n-1) +..+ v_n
    //v_1~v_n est la valeur int du champ
    //n est le nombre de champs
    result = prime * result + (boolValue ? 1231 : 1237);
    long temp;
    //La valeur de retour de la méthode doubleToLongBits est un type long
    temp = Double.doubleToLongBits(doubleValue);
    result = prime * result + (int) (temp ^ (temp >>> 32));
    result = prime * result + Float.floatToIntBits(floatValue);
    result = prime * result + intValue;
    result = prime * result + (int) (longValue ^ (longValue >>> 32));
    result = prime * result + ((stringValue == null) ? 0 : stringValue.hashCode());
    return result;
  }
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    ObjectHash other = (ObjectHash) obj;
    if (boolValue != other.boolValue)
      return false;
    if (Double.doubleToLongBits(doubleValue) != Double.doubleToLongBits(other.doubleValue))
      return false;
    if (Float.floatToIntBits(floatValue) != Float.floatToIntBits(other.floatValue))
      return false;
    if (intValue != other.intValue)
      return false;
    if (longValue != other.longValue)
      return false;
    if (stringValue == null) {
      if (other.stringValue != null)
        return false;
    } else if (!stringValue.equals(other.stringValue))
      return false;
    return true;
  }
}

Comparer des objets

//Exemple d'implémentation de la méthode compareTo dans la classe Person
//<Person>L'objet est comparé
//Trier par dictionnaire de noms de famille
public class Person implements Comparable<Person> {
  private String firstNameKana;
  private String lastNameKana;

  public Person(String firstNameKana, String lastNameKana) {
    this.firstNameKana = firstNameKana;
    this.lastNameKana = lastNameKana;
  }
  //Jugement de la taille par nom et prénom kana
  @Override
  //En premier`champ lastNameKana`Comparaison grande et petite
  public int compareTo(Person o) {
    //Si égal`champ firstNameKana`Comparaison grande et petite
    if (this.lastNameKana.equals(o.lastNameKana)) {
      return this.firstNameKana.compareTo(o.firstNameKana);
    } else {
      return this.lastNameKana.compareTo(o.lastNameKana);
    }
  }

  @Override
  public String toString() {
    return this.lastNameKana + " " + this.firstNameKana;
  }
}
import java.util.Arrays;
import java.util.Arrays;

public class CompareBasic {
    public static void main(String[] args) {
        var data = new Person[] {
                new Person("Harry", "Potter"),
                new Person("Ron", "Weasley"),
                new Person("Hermione", "Granger"),
                new Person("Albus", "Dumbledore"),
                new Person("Severus", "Snape"),
                new Person("Serius", "Black"),
        };
        Arrays.sort(data);
        System.out.println(Arrays.toString(data));
        //[Black Serius, Dumbledore Albus, Granger Hermione, Potter Harry, Snape Severus, Weasley Ron]
    }
}

Objet dupliqué

//Implémentez l'interface clonable pour autoriser explicitement la réplication
public class Person implements Cloneable {
  private String firstName;
  private String lastName;

  public Person(String firstName, String lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  //Faites correspondre la valeur de retour au type de personne au lieu de l'objet d'origine et évitez les problèmes de diffusion côté utilisateur.
  @Override
  public Person clone() {
    Person p = null;
    try {
      //Appelez la méthode clone de la classe Object
      p = (Person)super.clone();
    } catch (CloneNotSupportedException e) {
      throw new AssertionError();
    }
    return p;
  }

  @Override
  public String toString() {
    return this.lastName + this.firstName;
  }
}

Copier si le champ contient un type de variable

public class Person implements Cloneable {
  private String firstName;
  private String lastName;
  private String[] memos;

  public Person(String firstName, String lastName, String[] memos) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.memos = memos;
  }

  @Override
  public Person clone() {
    Person p = null;
    try {
      p = (Person) super.clone();
      //Dupliquer explicitement un objet tableau en appelant la méthode clone du champ correspondant
      p.memos = this.memos.clone();
    } catch (CloneNotSupportedException e) {
      throw new AssertionError();
    }
    return p;
  }

  @Override
  public String toString() {
    return  String.format("%s%s(%s)",
        this.lastName, this.firstName, this.memos[1]);
  }
}

Recommended Posts

[Java] Classe d'objets
Méthodes de classe Java
[Java] Héritage de classe
classe Scanner java
java (classe abstraite)
[Java] Classe imbriquée
Classe anonyme Java
À propos de la classe Java
[java] Classe abstraite
Classe locale Java
À propos de la division de classe (Java)
Bibliothèque de mappage d'objets JAVA
Sensation de la taille de l'objet Java
Examen de la classe interne Java
Champ de type de classe Java
Programmation Java (méthode de classe)
À propos de la classe Java String
Programmation Java (structure de classe)
À propos de la classe abstraite de Java
Java à partir du débutant, déclaration de classe / génération d'objet
Sous-chaîne de mémo Java (classe standard)
Astuces Java - Modificateurs de classe StaticUtility
Longueur du mémo Java (classe standard)
[Implémentation] Notes de classe de processus java
À propos des types de chargeur de classe Java
Comment utiliser la classe Java
[Java] Comparateur de la classe Collection
Définition et instanciation de classe Java
Muscle Java Orienté Objet Jour 1
Java
Résumé de la classe Java Math
[Java] Qu'est-ce que l'héritage de classe?
Méthode de classe variable de classe Java
Java
[Java] Opération objet de la classe ArrayList (AOJ ④ Inversion de séquence de nombres)
[Notions de base Java] Qu'est-ce que la classe?
[Jackson] Classe de conversion d'objet JSON
Créer une classe immuable avec JAVA
Jour 2 orienté objet Muscle Java ~ Héritage ~
Pourquoi les variables de classe sont-elles nécessaires? [Java]
Appeler la classe scellée de Kotlin depuis Java
[Java] Syntaxe orientée objet - Méthode / argument de classe
Diverses méthodes de la classe Java String
Comment désassembler un fichier de classe Java
Classe Kotlin à envoyer aux développeurs Java
[Effective Java] Supprimer les références d'objet obsolètes
Classe StringBuffer et StringBuilder en Java
Comment décompiler un fichier de classe Java
java (utilisez le type de classe pour le champ)
Code source Java lecture de la classe java.lang.Math
Comment utiliser les méthodes de classe [Java]
[Java] Comment utiliser la classe Math
[Java] Les restrictions d'accès aux champs privés ne sont pas par objet mais par classe
[Java] Wrapper qui exécute la méthode privée d'un objet depuis l'extérieur de la classe
Apprendre Java (0)
Étudier Java ―― 3
[Java] tableau
Qu'est-ce qu'une classe en langage Java (3 /?)
[Java] Annotation
Module [Java]