zoukankan      html  css  js  c++  java
  • 《疯狂JAVA讲义》不可变类

    class Name
    {
        private String firstName;
        private String lastName;
        public Name(){}
        public Name(String firstName,String lastName){
            this.firstName=firstName;
            this.lastName=lastName;
        }
        public void setFirstName(String firstName){
            this.firstName=firstName;
        }
        public String getFirstName(){
            return this.firstName;
        }
        public void setLastName(String lastName){
            this.lastName=lastName;
        }
        public String getLastName(){
            return this.lastName;
        }
    }
    public class Person
    {
        private final Name name;
        public Person(Name name){
        //    this.name=name;
        this.name=new Name(name.getFirstName(),name.getLastName());//change1
        }
        public Name getName(){
        //    return name;
            return new Name(name.getFirstName(),name.getLastName());//change2
        }
        public static void main(String[] args){
            Name n= new Name("wukong","sun");
            Person p=new Person(n);
            System.out.println(p.getName().getFirstName());
            n.setFirstName("bajie");
            System.out.println(p.getName().getFirstName());
        }
    }

    备注为change1和change2的地方是修改过的地方,当程序向Person构造器里传入一个Name对象时,该构造器创建Person对象时并不是直接利用已有的Name对象,而是重新创建了一个Name对象来赋给Person对象的nameField,因为这个已有的name对象时可变的。

    当使用final修饰引用类型变量时,仅表示这个引用变量不可被重新赋值,但引用类型变量所指向的类型依然可以改变。

  • 相关阅读:
    Maven报错:“请使用 -source 7 或更高版本以启用 diamond 运算符”
    C++项目——基于QT的电梯仿真系统
    Ubuntu下Java环境配置
    maven
    Java、IDEA笔记
    vim及ctags的使用
    英特尔(intel)、思科(cicso)实习面试
    可变参数函数——以printf为例子
    求单链表是否有环、环长、入环点、链长
    53. Maximum Subarray
  • 原文地址:https://www.cnblogs.com/whutqueqiaoxian/p/5711316.html
Copyright © 2011-2022 走看看