Heim > Java > JavaBase > Unveränderliche Klassen in Java und ihre Erstellungsregeln

Unveränderliche Klassen in Java und ihre Erstellungsregeln

王林
Freigeben: 2019-12-03 16:57:44
Original
3674 Leute haben es durchsucht

Unveränderliche Klassen in Java und ihre Erstellungsregeln

Unveränderliche Klasse bedeutet, wie der Name schon sagt, dass diese Klasse nach der Instanziierung nicht neu zugewiesen werden kann. Die acht von Java und java.lang.String bereitgestellten Verpackungsklassen sind alle unveränderliche Klassen.

Regeln, die beim Erstellen einer benutzerdefinierten unveränderlichen Klasse zu befolgen sind:

1. Verwenden Sie private und final, um Mitgliedsvariablen zu ändern.

2. Stellen Sie eine parametrisierte Konstruktionsmethode zum Initialisieren von Mitgliedsvariablen bereit.

3. Stellen Sie keine Setter-Methoden für Mitgliedsvariablen bereit.

4. Wenn die Mitgliedsvariable eine Variablenklasse enthält, müssen Sie die Methode hashCode und die Methode equal in Object neu schreiben.

Empfehlung für ein Java-Video-Tutorial: Java-Lernen

Zum Beispiel: Erstellen Sie eine unveränderliche Personenklasse

public class Person {
    private final String Name;
    private final String gender;
    
    /*
     * 无参构造方法
     */
    public Person(){
        this.Name="";
        this.gender="";
    }
    /*
     * 有参构造方法
     */
    public Person(String Name , String gender){
        this.Name = Name;
        this.gender = gender;
    }
    public String getName() {
        return Name;
    }
    public String getGender() {
        return gender;
    }
    /*
     * 重写hashCode方法
     * (non-Javadoc)
     * @see java.lang.Object#hashCode()
     */
    @Override
    public int hashCode() {
        return Name.hashCode() + gender.hashCode();
    }
    /*
     * 重写equals方法
     * (non-Javadoc)
     * @see java.lang.Object#equals(java.lang.Object)
     */
    @Override
    public boolean equals(Object obj) {
        if(this == obj)
            return true;
        if(obj != null && obj.getClass() == this.getClass()){
            Person pe = (Person)obj;
            if(this.getName().equals(pe.getName()) && this.getGender().equals(pe.getGender()))
                return true;
        }
        return false;
    }
Nach dem Login kopieren

Die Mitgliedsvariablen in der oben genannten Personenklasse sind unveränderlich Wenn Klassen veränderbare Klassen enthalten, besteht ein Problem bei der Verwendung der oben genannten Methode zum Erstellen unveränderlicher Klassen. Obwohl die Attribute von Person unveränderlich sind, sind die durch die Attribute referenzierten Objekte veränderbar.

Dies wird der Fall sein Zerstöre die Unveränderlichkeit der Person, wie im folgenden Beispiel.

Erstellen Sie zunächst eine veränderbare Klasse College

public class College {
    private String collNo;
    private String collName;
    public College(String collNo, String collName) {
        super();
        this.collNo = collNo;
        this.collName = collName;
    }
    public College() {
        super();
    }
    public String getCollNo() {
        return collNo;
    }
    public void setCollNo(String collNo) {
        this.collNo = collNo;
    }
    public String getCollName() {
        return collName;
    }
    public void setCollName(String collName) {
        this.collName = collName;
    }
    @Override
    public String toString() {
        return "College [collNo=" + collNo + ", collName=" + collName + "]";
    }
Nach dem Login kopieren

und verweisen Sie persönlich auf College

public class Person {
    private final College college;
    public Person() {
        this.college = null;
    }
    public Person(College college) {
        super();
        this.college = college;
    }
    public College getCollege() {
        return college;
    }
    @Override
    public String toString() {
        return "Person [college=" + college + "]";
    }
    public static void main(String[] args){
        College coll = new College("123456","土木工程");
        Person pe = new Person(coll);
        System.out.println("----->" + pe);
        coll.setCollName("信息工程");                      //这样就会改变Person对象
        System.out.println("======>" + pe);
    }
Nach dem Login kopieren

. Wie können Sie also eine unveränderliche Klasse mit veränderlichen Attributen erstellen? Wir müssen nur das College-Attribut für das Programm unzugänglich machen

public class Person {
    private final College college;
    public Person() {
        this.college = null;
    }
    public Person(College college) {
        //创建一个和传入对象有相同属性的College,赋值给成员变量
        this.college = new College(college.getCollNo(),college.getCollName());
    }
    public College getCollege() {
        //创建一个College将属性的值赋值给它并返回
        return new College(this.college.getCollNo(),this.college.getCollNo());
    }
    @Override
    public String toString() {
        return "Person [college=" + college + "]";
    }
Nach dem Login kopieren

Die obige Idee besteht darin, die Verbindung zwischen der Außenwelt und den variablen Attributen in der Person-Klasse zu trennen. Das Programm kann daher nicht direkt auf die Attribute reagieren Erstellen eines variablen Klassenattributs.

Empfohlene verwandte Artikel und Tutorials: Java-Einstiegsprogramm

Das obige ist der detaillierte Inhalt vonUnveränderliche Klassen in Java und ihre Erstellungsregeln. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage