您的位置:首页 > 其它

面向对象之get、set和直接获取public字段的区别?

2018-03-13 15:21 316 查看
http://blog.csdn.net/llittlebird001/article/details/52725245#reply

这哥们也在探寻这个问题,引发了我的一些感触,这里也总结下

为啥别人都在set get获取对象,有没有人曾思考过这个问题背后的本质原因呢?
我想说,大部分的人都会给你举个生动形象的例子,可是他们还是不能使发问者真正弄懂,或者说他们自身就不懂

下面谈下我的理解:

get、set的作用就是拿和放,你完全可以在get方法中进行一定的处理,也可以在set方法中进行一定的处理;
所以你直接用public的字段,这意味着,你需要参与这个处理的过程。

所以,重用性。比如一个量,你需要以5种形式拿到他,难道你每次用的时候,都要做5次处理?而如果你创建5个get方法,谁都可以拿到自己想要的数据,重用性不言而喻
此外,封装性。有些人认为用public字段,哇,好方便。确实很方便。这一点在pojo类中,体现的更为明显。而且我这里告诉你,public直接拿字段,和get拿字段,整个性能相差下来有2-5倍。但是我想说,这个方便,只有你认为他是方便的!因为你是开发者,你参与了这个类的设计,你完全知道这些字段代表了什么意义,而且你知道在什么时候拿到这些字段是正确无误的。但是我们不知道。这里我也举个例子。Java中有着许许多多巨大的、功能强大的库。你设想下,这些库,不再开放get方法给你,而是仅仅开放字段给你,你将何去何从?难道说,你要去阅读这个库的几十万行的源码,几千个字段,来总结出这个库的使用方法?所以这个时候,就需要get方法。他隐藏了内部的细节,仅仅暴露出结果给你。不可谓不舒服。正是由于get、set的封装,开源和分享的事业才能一天比一天好。自己亲力亲为的开发,确实是必要的,但是这不意味着世界上所有的东西都应该由你来开发,人的精力是有限的,只有合理的使用他人的库,我们才能开发出更具力量的产品。你,不是一个人在开发。
最后,得出这样一个原则,当你这个类的属性,仅仅是自己要用的,无需暴露给使用者的,用字段,也无妨(前提是你能hold住 所有的代码细节,当你的库越来越大,你也会不可避免的走向get、set,因为你自己都认不清每个字段了);当你暴露给其他人使用,必须使用get、set,否则再厉害的库,都会变得毫无价值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐