为什么要使用getter和setters / accessors?| Java Debug 笔记

236 阅读2分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看活动链接

提问:为什么要使用getter和setters / accessors?

使用仅获取和设置的getter和setter而不是仅对这些变量使用公共字段的优点是什么?

如果getter和setter所做的不只是简单的get / set,我可以很快地弄清楚这一点,但是我不清楚如何做到这一点:

public String foo;

比以下任何方面都更糟糕:

private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; }

而前者所需要的样板代码要少得多。

高分回答:

很多的知识点,真的需要写出来才会掌握!!! \color{purple}很多的知识点,真的需要写出来才会掌握!!!{~}

实际上,有很多充分的理由考虑使用访问器,而不是直接公开类的字段-除了封装的论点之外,并使将来的更改更容易。

这是我知道的一些原因:

  1. 封装与获取或设置属性相关的行为-这样可以在以后更轻松地添加其他功能(例如验证)。

  2. 在使用替代表示形式公开属性的同时,隐藏属性的内部表示形式。

  3. 将公共接口与更改隔离开来-在实现更改的同时允许公共接口保持不变,而不会影响现有的使用者。

  4. 控制属性的生存期和内存管理(处置)语义-在非托管内存环境(如C ++或Objective-C)中尤其重要。

  5. 为属性何时在运行时更改提供调试拦截点-在某些语言中,如果没有属性,则在何时何地更改为特定值的调试非常困难。

  6. 与旨在针对属性获取程序/设置程序进行操作的库之间的改进的互操作性-我想到了模拟,序列化和WPF。

  7. 通过覆盖getter / setter方法,允许继承者更改属性行为的语义,并公开该属性。

  8. 允许将getter / setter作为lambda表达式而不是值传递。

  9. getter和setter可以允许不同的访问级别-例如,get可以是公共的,但是set可以受到保护

文章翻译自 kgs4h5t57thfb6iyuz6dqtun5y-ac4c6men2g7xr2a-stackoverflow-com.translate.goog/questions/1…

作者建议:易扩展、属性隐藏、set方法建议使用合理的修饰符,无需完全公开

欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!! \color{red}欢迎关注我的专栏StackOverFlow,我会筛选优质的问答,面试常考!!!{~}

有最新、优雅的实现方式,我也会在文末写出我对本问答的见解 \color{red}有最新、优雅的实现方式,我也会在文末写出我对本问答的见解{~}

真心感谢帅逼靓女们能看到这里,如果这个文章写得还不错,觉得有点东西的话

求点赞👍 求关注❤️ 求分享👥 对8块腹肌的我来说真的 非常有用!!!

如果本篇博客有任何错误,请批评指教,不胜感激 !❤️❤️❤️❤️