在公有类中使用访问方法而非公有域

第十四条:在公有类中使用访问方法而非共有域


1.简单介绍

这一条的意思是让你这样做:

public class MyObject{
  private int filed01;
  public int getFiled01() {
    return filed01;
  }
  public void setFiled01(int filed01) {
    this.fild01 = filed01;
  }
}

而不要这样做:

public class MyObject{
  public int filed01;
}

2. 原因

如果直接将类中的域暴露为共有域,那么你将失去这个域的控制权。
举个例子,对于上面例子中不好的用法,如果你以后想要在类中记录field01被赋值了多少次和被获取了多少次,你将无法做到,因为你根本不知道它什么时候在外部被获取,什么时候再外部被赋值。

3. 加入一些个人拓展理解(总是觉得不太对,希望得到指正)

一个类要确保对所以域的绝对控制权,我们不应该让任何外部类获取到该类的可变对象的引用。
比如说下面这个类,里面有一个域是一个可变对象,我们应该这样做:

public class MyObject{
  private List<String> list = new ArrayList<>;
  public List<String> getList() {
    return new ArrayList(list);
  }
  public void setList(List<String> list) {
    this.list = new ArrayList(list);
  }
}

这样做,外部将永远也获取不到list的引用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这种类数据是可以被直接访问的,这些类没有提供封装的功能,如果不改变API,就无法改变它的数据表示法,也无法强加任何...
    KubiL阅读 3,255评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,899评论 18 399
  • 常量与变量使用let来声明常量,使用var来声明变量。声明的同时赋值的话,编译器会自动推断类型。值永远不会被隐式转...
    莫_名阅读 3,265评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,429评论 11 349
  • 我每天丧的像一条狗,但是有人告诉我,丧也要丧在心里,不丧在脸上,不丧在话里,不丧在人群间。 1.上午忙炸天,没时间...
    宋大宝不饱阅读 4,119评论 0 0