为什么要用Getter和Setter方法,而不是公开属性

《为什么要用Getter和Setter方法,而不是公开属性》 封面

大多数字段的访问都是通过Getter和Setter方法来间接访问,为什么不直接将字段设置为公开属性Public呢?答案在于前者的未来可能性。当我在Java语言编程中开始我的职业生涯时,我就对Getter和Setter感到困惑。为什么要这么写呢?为什么不直接用Public呢?这对我来说是个奇怪的语法。

我了解到,通过公共访问修饰符,类的一个字段对于任何包都是可访问的,并且使用getter/setter,我实际上正在做相同的事情——使字段私有化,而getter/setter方法是公共的,因此它可以被任何包访问。那么,下面属性name和value的区别是什么呢?

《为什么要用Getter和Setter方法,而不是公开属性》 代码示例

慢慢地,我意识到了为什么我们使用Getter和Setter,以及为什么它们是重要的。使用Public属性与通过Getter和Setter公开它的主要区别在于保持对该属性的控制。如果你把一个字段公开,就意味着你可以直接访问调用方。然后,调用者可以做任何事情与你的领域,无论是有意或无意。例如,可以将字段设置为空值,如果在另一个方法中使用该字段,则该方法可能会因空指针异常而崩溃。

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

因此,Getter和Setter起到保险丝或断路器的作用,电流必须通过保险丝。如果发生故障,熔断器与主电路分离,电路是安全的。这里的概念是相同的。如果出现任何错误,Setter将不会将该值传递给类成员字段。读了解释之后,我知道你还有一个问题。

我理解,但一般来说,我们不写任何东西在Getter和Setter。我们只返回并设置字段,就像公开字段一样。那你为什么要说这些?为了回答这个问题,我说通过编写Getter和Setter,我们创建了一个用于将来添加任何验证方法的条款,目前,没有验证,但是如果将来出现任何错误,我们只是在Setter中添加验证逻辑。但是,当一个字段没有这样的验证约束时,为什么要麻烦写一个Getter和Setter?我可以简单地公开它。

根据我的理解,问题的症结在于避免使代码变得不必要的复杂。这就像当有人试图使他们的代码基础更加通用,适应于任何变化。虽然他/她所想到的大部分变化永远不会到来。因此,Getter和Setter不会使代码复杂,这将在你的代码中得到验证。

欢迎关注我的公众号 “java工会”,一起交流技术

    原文作者:朱潘
    原文地址: https://www.jianshu.com/p/56fa1c0cceb0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞