zoukankan      html  css  js  c++  java
  • 关于创建Immutable对象时需要注意的几个问题

     是否Immutable对象:

    a. 如果对象应该是常量,则应该设计成Immutable;

    b. 如果对象的状态会频繁的改变,则应设计成mutable的,比如StringBuffer。

    c. 如果一个对象很大,那么设计成Immutable的时候要格外谨慎。为了改变对象状态,大的Immutable对象需要拷贝这可能会耗费较多的资源。

    d. 为了保证封装性,当方法返回一个Collection时应该保证其Immutable特性。 

    1. 属性都定义成private、final的,防止对象类的方法改变属性值、或者通过反射setAccessible改变可见性。 

    public class ImmutablePerson{

    private final int age;

    private final String firstName, lastName;

    public ImmutablePerson(int age, String firstName, String lastName){

                  if(firstName==null || lastName==null) throws new IllegalArgumentException("firstName or lastName can not null!");

          this.age = age; 

            }

            public int getAge(){return age;}

            public String getFirstName(){return firstName;}

    public String getLastName(){return lastName;} 

    }

     即使这里没有提供修改属性的接口,通过反射我们还是可以直接修改private的field。这个类还不是Immutable的。 

    2. 当Immutable对象中包含mutable属性时,要注意在set或者get的时候返回mutable属性的一个拷贝,而不能是其本身。 

     class ImmutableObject{

          private final Point point;

          public void initPoint(Point point){this.point=new Point(point);}

          public Point getPoint(){return new Point(this.point);}

     }

    3. 有些时候Immutable对象要考虑性能问题。 

  • 相关阅读:
    Tye exception
    DataSeeder
    angular
    认证Authentication
    MVC
    Ef Core
    工作单元
    VirtualFileSystem
    中间件
    日志
  • 原文地址:https://www.cnblogs.com/xinglongbing/p/2228649.html
Copyright © 2011-2022 走看看