为什么要用Getters/Setters方法
Getters/Setters的特征
Getters/Setters通常用来保护你的数据,特别是在创建类时。
对于每个实例的属性,getter方法来返回它的值,而setter方法去设置或更新它的值,所以它们分别是访问器(accessors)和调整器(mutators)。
一般,getter以单词“get”开头,setter以单词“set”开头,后面跟着变量名。一般,getter以单词“get”开头,setter以单词“set”开头,后面跟着变量名。在这两种情况下,变量名的首字母都是大写的:
public class Vehicle {
private String color;
// Getter
public String getColor() {
return color;
}
// Setter
public void setColor(String c) {
this.color = c;
}
}
getter方法返回属性的值。setter方法接受一个参数并将其分配给属性。
一旦定义了getter和setter,我们就在main中使用它:
public static void main(String[] args) {
Vehicle v1 = new Vehicle();
v1.setColor("Red");
System.out.println(v1.getColor());
}
// 输出 "Red"
getter和setter允许对值进行控制。在实际设置值之前,可以在setter中验证给定的值。
为什么要用Getters/Setters方法
getter和setter允许控制在代码中访问和更新重要变量的方式。例如,这个setter方法:
public void setNumber(int number) {
if (number < 1 || number > 10) {
throw new IllegalArgumentException();
}
this.number = num;
}
通过使用' setNumber '方法,可以确保' number '的值始终在1到10之间。这比直接更新“number”变量要好得多:
obj.number = 13;
如果直接更新“number”,可能会在代码的其他地方产生意想不到的副作用。在这里,将“number”设置为13违反了我们想要建立的1到10的约束。
将' number '设置为私有变量并使用' setNumber '方法可以防止这种情况发生。
另一方面,读取' number '值的唯一方法是使用getter方法:
public int getNumber() {
return this.number;
}
简而言之,使用Getter 和 Setter 函数有两个原因:
1. 语法(syntax)原因。更轻松、更快速地读取使用访问器函数创建的代码
2.封装(Encapsulation)。可以使用访问器函数创建更安全的代码。这允许以后更容易地添加额外的功能(如验证)。
隐藏属性的内部表示,同时使用替代表示公开属性。
如果private 是不让别人用, public 是让别人用,
但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置, 如下:
public set(Object sth){
if(你满足权限条件){
你可以设置
}else{
对不起, 你没有设置的权限.
}
}
下面是两个简单的例子:
例 1
// Java Program to Illustrate Getter and Setter
//导入输入输出类
import java.io.*;
// Class 1
// 助手类
class GetSet {
// 该类的成员变量
private String name;
// 方法 1 - Getter
public String getName() { return name; }
// 方法 2 - Setter
public void setName(String N)
{
// 这个关键字指的是当前实例本身
this.name = N;
}
}
// Class 2
// Main 方法
class GS {
public static void main(String[] args)
{
// 在 main() 方法中创建 Class1 的对象
GetSet obj = new GetSet();
// 通过调用 setter 方法设置名称
obj.setName("GetSet's name");
// 通过调用 getter 方法获取名称
System.out.println(obj.getName());
}
}
输出
GetSet's name
Getter和Setter可以根据代码的要求方便地输入任何数据类型的变量值。getter和setter允许管理如何访问和修改代码中的关键变量。
例2
// Java Program to Illustrate Getter and Setter
// 导入输入输出类
import java.io.*;
class GetSet {
// 该类的成员变量
private int num;
// 方法 1 - Setter
public void setNumber(int number)
{
// 检查数字是否在 1到10 之间
if (number < 1 || number > 10) {
throw new IllegalArgumentException();
}
num = number;
}
// 方法 2 - Getter
public int getNumber() { return num; }
}
// Class 2
// Main class
class GS {
public static void main(String[] args)
{
GetSet obj = new GetSet();
// 在 main() 方法中调用 Class1
obj.setNumber(5);
// 打印上述设定的数字
System.out.println(obj.getNumber());
}
}
输出
5
这里我们可以看到,如果我们取一个大于10的值,那么它会显示错误。通过使用setNumber()方法,可以确保数字的值总是在1到10之间。这比直接更新number变量要好得多。
注意: 这可以通过将数字设置为私有变量并使用setNumber方法来避免。另一方面,使用getter方法是读取数字值的唯一方法。