好问题
Good  Question
  • 首 页
  • 问题
    • PHP
    • JAVA
    • CPlusPlus
    • C#
    • SQL
  • 关 于
  • 联 系
在JAVA中,为什么使用getters和setters方法? 关闭 返回上一级  

在JAVA中,为什么使用getters和setters方法?
+ 查看更多

发布日期:2018-03-10 13:56
分类:JAVA
浏览次数:156
使用getters和setters的好处是什么,只是get和set的话,而不是简单地使用这些变量的公共域?如果getters和setters一直比简单的get/set做的更多,我能很快地解决这个,但是我不能100%的清楚:
public String foo;
比下面的代码并不差多少?
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
而且前者花费的代码更短。
从一个Java Web开发者的角度来看,编译列表的内容对我来说就是赢家:
1.当你意识到你需要比设置或者得到值做更多的事情时,你没必要改变代码库的每个文件。
2.你可以在这里执行验证。
3.你可以改变正在被设置的值。
4.你可以隐藏内部的表现。getAddress()其实可以为你获得几个域。
5.你已经从表单之下的变化中隔离了公共的接口。
6.一些库需要这个。反射类、序列化类、模仿类。
7.继承这个类,你可以覆盖默认的函数。
8.你可以有不同的访问级别对getter和setter。
9.延迟加载。
10.人们会简单地告诉你不要使用Python。

回答

其实有许多好的理由去考虑为什么使用访问器而不是直接暴露类的域——在封装的参数之外并且让未来的改变更加容易。
以下是我知道的一些理由:
 
  • 行为的封装与属性的获得或者设置相关联——这使得日后增加额外的函数(想验证函数)更加容易。
  • 用一个替代的表示暴露一个属性来隐藏这个属性的内在表示。
  • 从你的改变中隔离公共的接口——当要求现有的功能保持不变的情况下,要改变实现的时候,可以允许公共的接口保持不变。
  • 控制属性的生命线和内存管理——在不被管理的内存环境中特别重要(比如C++和Objective-C)。
  • 在属性在运行时改变的时候提供了一个调试的接口——在没有这种方法的其他语言中,调试一个属性何时何地变成了某个特定的值非常的苦难。
  • 对库互操作性的提高是针对属性操作设计的,getter/setters-可以想到模仿类、序列化类、WPF。
  • 允许子类改变属性的表现形式并且通过覆盖getter/setter方法使其暴露。
  • 允许getter/setter以lambda表达式的方式通过而不是值。
  • Getters和setters允许不同的访问级别——比如get是公共的,但是set是被保护的。
上一篇JavaBean到底是什么
问题:JAVA支持参数默认值吗?下一篇
下一篇问题:JAVA支持参数默认值吗?

最新文章

  • 函数`__construct`用来干嘛的
    发布日期:2018-03-26
  • 通过访客的IP得到他们的地区
    发布日期:2018-03-26
  • 合并两个PHP对象的最好的方法是什么?
    发布日期:2018-03-26
  • 该如何把一该如何把一个对象转化成数组?
    发布日期:2018-03-26
  • 什么是输出缓冲区?
    发布日期:2018-03-26
  • 在PHP中怎么把用逗号分隔的字符串分隔在一个数组里?
    发布日期:2018-03-26
  • 在PHP中使用foreach循环时查找数组的最后一个元素
    发布日期:2018-03-26
关于好问
收集整理一些有用的问题和回答,造福中国的程序旺和IT喵们!
友情链接
起飞页 
相关信息
版权声明
Copyright © 2016 - 2022  苏州卡达网络科技有限公司 备案号:苏ICP备09008221号