首页 新闻 搜索 专区 学院

为什么Java中人们都将属性设为私有,然后写setter/getter?

0
[已解决问题] 解决于 2018-05-25 19:12

很多人推崇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>

Yoooshiki的主页 Yoooshiki | 初学一级 | 园豆:6
提问于:2018-05-24 22:39
< >
分享
最佳答案
1

因为它的编译器帮你自动生成getter/setter

奖励园豆:5
西漠以西 | 小虾三级 |园豆:1670 | 2018-05-25 11:21

原来是这样,感谢

Yoooshiki | 园豆:6 (初学一级) | 2018-05-25 19:12
其他回答(5)
0

因为封装之后会更安全,有类型检查

DanBrown | 园豆:1496 (小虾三级) | 2018-05-25 08:17

那为什么kotlin就不需要getter/setter呢?

支持(0) 反对(0) Yoooshiki | 园豆:6 (初学一级) | 2018-05-25 09:30
0

一方面通过方法调用,会强调赋值这个操作,直接赋值效果会弱。另一方面,在getter以及setter中虽然不建议,也很少这样做,可以在方法体里面写判断,打印,记录日志等操作。

letcafe | 园豆:434 (菜鸟二级) | 2018-05-25 08:56

那为什么kotlin就不需要getter/setter呢?

支持(0) 反对(0) Yoooshiki | 园豆:6 (初学一级) | 2018-05-25 09:30
1

setter/getter 统一了这个类的变量修改\获取值的口子,更加方便你对这个类的控制。

比如这个类的某个变量我不想让你去修改它,那我就把set方法删了就行,

还比如我想要限制set方法设置的值的范围,get方法获取值的时候,返回一个比较特殊的值,

这些需求可以很方便的通过setter/getter去设置,减小对源代码的修改,而且扩展性更好。

让我发会呆 | 园豆:2636 (老鸟四级) | 2018-05-25 09:35
0

getter一般都是要有的,setter看情况;应该是面向修改是封闭的,面向使用是开放的

橘子果汁 | 园豆:314 (菜鸟二级) | 2018-05-25 10:05
-1

因为工具撇所以要人切。

就像c++,c恶心的声明,这个完全可以让编译工具通过扫描函数完成,但是工具就那屌样。

所以我不随波逐流,坚持主玩c#。

你看看像mybatis这些垃圾玩意儿,除了让菜鸟们代码一致有什么存在的意义。

过度的框架化,整得一些连个基本的计算机常识都没有了,明明a->f,可以写出a->b->...->f。

花飘水流兮 | 园豆:11008 (专家六级) | 2018-05-25 11:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册