当前位置: 首页 > 面试题库 >

在java中为什么要使用赋值和取值方法来访问属性?

莫飞翮
2023-03-14
问题内容

在java中为什么要使用赋值getter和取值setter方法来访问属性?


问题答案:

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

这是我知道的一些原因:

  • 封装与获取或设置属性相关的行为-这样可以在以后更轻松地html" target="_blank">添加其他功能(例如验证)。
  • 隐藏属性的内部表示形式,同时使用替代表示形式公开属性。
  • 将公共接口与更改隔离开来-在实现更改的同时允许公共接口保持不变,而不会影响现有的使用者。
  • 控制属性的生存期和内存管理(处置)语义-在非托管内存环境(如C ++或Objective-C)中尤其重要。
  • 为属性何时在运行时更改提供调试拦截点-在某些语言中,如果没有属性,则在何时何地更改为特定值的调试非常困难。
  • 与旨在针对属性获取程序/设置程序进行操作的库之间的改进的互操作性-我想到了模拟,序列化和WPF。
  • 通过覆盖getter / setter方法,允许继承者更改属性行为的语义,并公开该属性。
  • 允许将getter / setter作为lambda表达式而不是值传递。
  • getter和setter可以允许不同的访问级别-例如,get可以是公共的,但是set可以受到保护。


 类似资料:
  • 到目前为止我已经重写了这篇文章:

  • 我很难理解为什么要编译以下代码: 我可以理解为什么第一个赋值是有效的-

  • PEP 572引入了为Python 3.8实现的赋值表达式(俗称Walrus操作符)。这似乎是一个非常重要的新特性,因为它将允许在理解和lambda函数中进行这种形式的赋值。 赋值表达式的语法、语义学和语法规范到底是什么? 为什么在PEP 379中关于“添加赋值表达式”的类似想法之前遭到拒绝的情况下,引入了这个新的(似乎相当激进的概念)?

  • 问题内容: 在许多Java源代码中(例如),我看到了类似的东西; 我了解基本模式(锁定,最终解锁),但是我的问题是, 为什么在使用它之前先对本地作用域的Lock变量进行赋值? 为什么这样做而不是以下内容? 它会影响优化吗?第一个示例可以防止锁变粗吗? 评论后编辑 :如果您真的不知道为什么会出现这种情况,请不要添加答案。这是从Java来源获得的,@author标记是Doug Lea,所以我很确定它的

  • 问题内容: 是否有一个-safe属性访问(空传播/存在)操作者在ES6(ES2015 / JavaScript.next /和谐)等 中 的CoffeeScript 例如?还是计划针对ES7? 大致如下所示: 理想情况下,解决方案不应该分配(甚至)到如果IS 问题答案: 更新 (2020-01-31):似乎人们仍在寻找这个,这是当前故事: 可选的链接规范(第4阶段):https : //githu

  • 问题内容: 是否可以在SASS中访问HTML属性值?我有一行代码说 哪里是一些jQuery东西的结果。我需要计算一些CSS。如何将其另存为SASS变量? 或者,是否可以计算某个父元素的子元素数量?说我有这段代码: (您可能已经猜到了,matches的值与列表项的数量匹配。)SASS可以对列表项进行计数并将该数字保存为变量吗? 任何想法将不胜感激。 问题答案: Sass只是CSS生成器。它实际上并没