java中可以用 代替%吗_java中getter 和 setter 方法有什么意义?为什么不用public代替GS?...

知乎里的一个答案:https://www.zhihu.com/question/21401198

的确可以暴露,如果1. 所有内外代码都是你自己写;2. 这个模块再也不改了;3. 不会继承它,或者继承但不改变语义。 David John Wheeler有一句名言:

“All problems in computer science can be solved by another level of indirection.”

getter、setter就是个很好的中间层。

直接摘录stackoverflow上一个不错的总结:

oop - Why use getters and setters?

这两个方法可以方便增加额外功能(比如验证)。

内部存储和外部表现不同。

可以保持外部接口不变的情况下,修改内部存储方式和逻辑。

任意管理变量的生命周期和内存存储方式。

提供一个debug接口。

能够和模拟对象、序列化乃至WPF库等融合。

允许继承者改变语义。

可以将getter、setter用于lambda表达式。(大概即作为一个函数,参与函数传递和运算)

getter和setter可以有不同的访问级别。

OSChina里的一个答案:https://www.oschina.net/question/699232_130491?sort=defaultanswers

GS不是全部都是eclipse自动生成的样子,你可以在setter或getter中封装很多功能。自动生成的毫无营养,但是却是代码规范,规范很重要的。

setter方法 1.可以限制和检验setter方法传入的参数 2.隐藏对象内部数据结构 3.保持对象在每个状态的完整性 getter方法 1.按照客户的期望返回格式化数据 2.控制服务的顺序(例如只有当连接建立时getter方法才返回相应实例) 参考:http://stackoverflow.com/questions/7207994/java-setter-and-getter 框架中写的大部分getter和setter方法都是直接返回和赋值,不过实际上可以在方法中加入访问权限控制、逻辑判断等,实现OO编程中封装和信息隐藏。 其实说得明白点吧,这只是java类(特别的很多时候是一个javabean)的两个方法,以提供对某个变量(字段)设置与访问的两个入口,在很多时候也正如你说,跟定义成public是没有两样的,具体的原因在于: (1)由于很多框架都是调用这两个方法来实现沟通,这是一种习惯了。 (2)get/set方法也不一定只是简单的作一个赋值,或一个返回值吧,在这里可以作一些权限的控制,比如不是每个角色都可以赋值的。再比如返回的值不一定是值本身,可以是经过处理了的,比如加密,这用public定义是不能作到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值