我记得我最开始好像在哪看过这个问题,但是忘了答案是什么,v 友能不能提示下。
1
proxytoworld 2023-09-08 16:00:41 +08:00 1
限制修改
|
2
impanghu 2023-09-08 16:07:53 +08:00 1
封装性
|
3
jameszhangqk1 2023-09-08 16:08:53 +08:00 1
封装、多态、继承 🤣
|
4
hidemyself 2023-09-08 16:10:52 +08:00 1
因为很多三方框架会调用这几个方法。
|
5
memedahui 2023-09-08 16:19:47 +08:00 3
这是 java 的基本特性封装性,如果你使用 public field,你不可以:1 在设置的时候进行校验,2 在取值的时候进行加强,而且如果你编写的是公用 api,别人就可以随意调用你的 Pojo 方法和属性,表面上你是失去了这个属性的控制权,实际上是你完全失去了对于 pojo 的控制权.比如你想让线程 Getter/Setter 里面 field 属性,你发现你已经做不到了.完整的教程在<EffectiveJava>第四章:类和接口
|
6
aptupdate 2023-09-08 16:20:26 +08:00 via iPhone 1
我记得这种叫贫血模型,为了减少耦合容易维护啥的,后面又搞出来一大堆 BO QO VO DTO 就这么延续下来了。
|
7
bugDev 2023-09-08 16:23:37 +08:00 1
kotlin 的使用,var 和 val ,反编译会发现都是 private ,只是 var 会有 setter 和 getter ,val 只有 getter
|
8
knightdf 2023-09-08 16:33:29 +08:00 2
你会把用户输入的数据直接拼接到 sql 里执行吗?不会对吧?这不是和 getter/setter 的道理一样么
|
9
Masoud2023 OP @memedahui #5 看来有必要重读一次这本书了
|
10
tairan2006 2023-09-08 17:09:21 +08:00
缺点肯定有,不过你要是跟 Go 一样写,其实 public 也不是不行
|
11
TWorldIsNButThis 2023-09-08 17:12:12 +08:00
你有没有发现过,field 是无法被 override 的?
|
12
xtreme1 2023-09-08 17:14:20 +08:00
方便在读写数据时下断点
|
13
lambdaq 2023-09-08 17:22:28 +08:00
方便日后偷袭。
|
14
Rocketer 2023-09-09 06:21:23 +08:00 via iPhone
应该是为了读写时顺便做点别的,比如给数组做个 deep copy 。
但 Java 没有 C#的 property ,又要统一格式,所以在不需要额外处理的地方也统一用 getter/setter 了。说到底这是糟粕,不需要过分解读。 |