很多人推崇kotlin
,认为语法简介、优雅,再也不用写冗长的setter/getter
方法了。
我个人目前也在使用kotlin
,但我有个问题,就是Java中如果不将属性设为private
, 而是public
,那么同样不需要写setter/getter
方法啊?
kotlin
的代码中,比如:
class ProductInfo {
var productId:String?=null
var productName:String?=null
var productPrice:BigDecimal?=null
var productStock:Int?=null
var productDescription:String?=null
var productIcon:String?=null
var productStatus:Int?=null
var categoryType:Int?=null
var createTime:Date?=null
var updateTime:Date?=null
}
也并不是将属性设为私有啊。
<font color="red"> 很多人都说使用setter/getter
是因为面向对象的封装特性,安全之类的,这个我认同,但是为什么kotlin
里面就不需要setter/getter
呢? </font>
因为它的编译器帮你自动生成getter/setter
原来是这样,感谢
因为封装之后会更安全,有类型检查
那为什么kotlin
就不需要getter/setter
呢?
一方面通过方法调用,会强调赋值这个操作,直接赋值效果会弱。另一方面,在getter以及setter中虽然不建议,也很少这样做,可以在方法体里面写判断,打印,记录日志等操作。
那为什么kotlin
就不需要getter/setter
呢?
setter/getter 统一了这个类的变量修改\获取值的口子,更加方便你对这个类的控制。
比如这个类的某个变量我不想让你去修改它,那我就把set方法删了就行,
还比如我想要限制set方法设置的值的范围,get方法获取值的时候,返回一个比较特殊的值,
这些需求可以很方便的通过setter/getter去设置,减小对源代码的修改,而且扩展性更好。
getter一般都是要有的,setter看情况;应该是面向修改是封闭的,面向使用是开放的
因为工具撇所以要人切。
就像c++,c恶心的声明,这个完全可以让编译工具通过扫描函数完成,但是工具就那屌样。
所以我不随波逐流,坚持主玩c#。
你看看像mybatis这些垃圾玩意儿,除了让菜鸟们代码一致有什么存在的意义。
过度的框架化,整得一些连个基本的计算机常识都没有了,明明a->f,可以写出a->b->...->f。