返回信息流我知道写这个一定会被喷的,不过最近想这个概念想了比较久,还是想说一说。。。
首先,我个人认为getter和setter的一些好处:
1、把读写权限分开来了,这是设置public和private所做不到的
2、对于某些读入和写出需要做统一处理的话,复用性较高
3、一定程度上可以避免变量值被错误的修改
但是,因为IDE的辅助功能,我觉得getter和setter有点泛滥了。对于一个纯粹需要保存变量的类来说,一堆纯粹IDE生成的getter和setter真的是太啰嗦了(也许JAVA本身就应该是啰嗦的吧)。且不说getter和setter占了一大半的代码量,而且取值和赋值的时候也显得非常冗余。
大概是写python写的有点多了,对代码的冗余完全不能忍。于是乎,最近一怒之下把在开发的android应用所有无用的getter和setter全删了,只保留需要的getter和setter(上述的1、2好处)。
网上有人说使用getter和setter能够使后期修改成本变小,一定程度上确实可以,但是我所开发的项目中,对一个实体类的改动最频繁的是:添加/删除变量,改变变量类型。完全不觉得在这方面上,getter和setter能够起到任何帮助,反而得花费时间修改对应的getter和setter(虽然有IDE帮忙)。
纯粹个人理解,欢迎批评~
这是一条镜像帖。来源:北邮人论坛 / java / #41640同步于 2015/6/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于getter和setter
hwz2311245
2015/6/14镜像同步29 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不用就不写啊,感觉没什么问题
【 在 hwz2311245 (【意涵团】Captain) 的大作中提到: 】
: 我知道写这个一定会被喷的,不过最近想这个概念想了比较久,还是想说一说。。。
: 首先,我个人认为getter和setter的一些好处:
: 1、把读写权限分开来了,这是设置public和private所做不到的
: ...................
通过『我邮2.0』发布
需要控制权限才写getter和setter,一般保存引用的话不需要吧,比如官方示例的ViewHolder就不带
【 在 hwz2311245 (【意涵团】Captain) 的大作中提到: 】
: 我知道写这个一定会被喷的,不过最近想这个概念想了比较久,还是想说一说。。。
: 首先,我个人认为getter和setter的一些好处:
: ...................
楼主用scala吧。val就是只有getter,var就是有getter和setter。
class Foo {
val readOnlyField = 42
var readWriteField = 84
}
object Main extends App {
val f = new Foo()
println(f.readOnlyField) // 42. 其实是调用了f.readOnlyField()方法
println(f.readWriteField) // 84. 其实是调用了f.readWriteField()方法
f.readWriteField = 9 // 其实是调用了f.readWriteField=(9)方法。嗯。方法的名字叫“readWriteField=”,有等号。
println(f.readWriteField) // 9
}
【 在 dss886 的大作中提到: 】
: 需要控制权限才写getter和setter,一般保存引用的话不需要吧,比如官方示例的ViewHolder就不带
还有二进制兼容性的问题,也是setter和getter的好处。
二进制兼容是什么意思?……我就知道如果不带getter和setter,用Gson转json为对象会报错-。-
【 在 nuanyangyang (暖羊羊) 的大作中提到: 】
: 还有二进制兼容性的问题,也是setter和getter的好处。
【 在 dss886 的大作中提到: 】
: 二进制兼容是什么意思?……我就知道如果不带getter和setter,用Gson转json为对象会报错-。-
就是如果张三写了一个库libFoo,以jar包发布。李四写了一个应用Bar,Bar使用libFoo里的一个类Foo。然后张三修改了Foo的实现,给李四发了一个jar包。问李四能不能不重新编译他的Bar就直接使用更新过的类。