为什么要用Getters/Setters方法

为什么要用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方法是读取数字值的唯一方法。

  • 17
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Robinτ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值