为什么要用 get/set,而不是公开属性

get/set方法提供对类属性的控制,确保数据安全。通过get/set,可以进行验证检查,防止直接修改字段导致的错误。这样做使得代码更通用,适应未来可能的变化,而不直接使用public属性可能导致不可预见的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

大多数字段的访问都是通过 get/set 方法来间接访问,为什么不直接将字段设置为公开属性 public 呢?答案在于前者的未来可能性。

二、保持对该属性的控制

通过 get/set 公开它与使用 public 属性的主要区别在于保持对该属性的控制。如果把一个字段公开,就意味着可以直接访问它。然后,调用者可以做任何事情,无论是有意或无意。例如,可以将字段设置为空值,如果在另一个方法中使用该字段,则该方法可能会因空指针异常而崩溃。

但是,如果提供了 get/set,可以在完全控制的同时提供间接访问。设置值的惟一方法是通过 set,获得值是通过 get ,字段只有一个入口和一个出口。因为 get/set 是允许代码块的方法,所以可以对它们进行验证检查,对象决定是否设置调用者值。这同样适用于 get 方法——可以决定返回实际的引用或克隆它,并将其返回给调用者。

因此,get/set 起到保险丝或断路器的作用。电流必须通过保险丝,如果发生故障,熔断器与主电路分离,电路是安全的。同样,如果出现任何错误,set 将不会将该值传递给类成员字段。

一般不写任何东西在 get/set 方法中。只返回并设置字段,就像公开字段一样。通过编写 get/set,创建了一个用于将来添加任何验证方法的条款,目前没有验证,但是如果将来出现任何错误,只是在 set 中添加验证逻辑。

三、代码通用

当一个字段没有这样的验证约束时,为什么要麻烦写 get/set?问题的关键在于避免使代码变得不必要的复杂。开发者试图使代码基础更加通用,适应于任何变化。虽然所想到的大部分变化永远不会到来。因此,get/set 不会使代码复杂,这将在代码中得到验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JFS_Study

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

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

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

打赏作者

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

抵扣说明:

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

余额充值