set, get 方法,是 Java 开发者最常见的两个方法,从初学的手敲,到各种 IED 的自动生成,说它是一个项目里最多的方法名也不为过。

还记得几年前,一位开发 IOS 的同事问我,为什么你们 Java 非要用 set, get 方法操作变量,难道就不直接对变量进行赋值吗,就算不能赋值,还不能直接读取吗?我赶紧写了个类试了一下,哎,可以啊,那为啥呢,想了半天,不知道该怎么回答,憋了一句,这是规范。同事“哦”了一声,“好可怜的规范”。

大家都很忙的,晚上还要加班呢,谁有空在去深究为什么,大家都这么写嘛,规范嘛。

既然要重新学习,那自然要搞明白为什么。

首先我们先来弄清楚变量的作用域,详情可以看我的这篇文章重新学 Java 系列:public private protected friendly 的区别(https://wxnacy.com/2018/12/30/java-renew-modification/)

我们用到最多的两个修饰符为 public, private,它们的区别在于

  • public: 所有地方都可以调用。
  • private: 只有当前类可以调用。

通常当修饰符为 private 时才需要用到 set, get 方法,因为该修饰符不能像 public 一样被外部方法和修改,那为什么我们不直接用 public 修饰呢。

真正的原因在于,作为一个类,我的变量想让你访问和修改,但我不希望你随便修改,而是按照我的方式来访问修改。

比如

1
2
3
4
5
6
7
public void setName(String name) {
this.name = "wxnacy_" + name
}

public String getAge() {
return this.age + 10
}

两个方法都不是将原数据传入和传出,都经过了类的独特修改才进行的相应操作。

所以平常我们觉得它们多余,只是很多时候用不到这个特点而已。

03-16 20:55