Android开发中JavaBean不推荐写get/set方法原因

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/johnWcheung/article/details/79983001

Android使用get/set方法会降低性能,因为内存是有限的,随着应用复杂度增加,后期的应用更倾向于模块化、插件化来尽量减少主程序的容量,一般会采用如下几种方式做优化:

  • 使用so来封装共同模块,通过加载库的形式实现代码共享

  • 使用jar形式跟so一样,不过容易被反编译

  • 简化代码编写可以使用反射机制和注解来实现

  • 插件,使用sharedUserId来实现共享进程的方式

这里面提到反射,如果属性是私有的,我们需要反射它们的get方法,把原来对象的属性复制给新的对象中,这跟直接反射拿到public属性比较,显然执行效率降低了很多。

另外,我们阅读Google的源代码,都是实体类属性被定义成public的。

再者,Android对其他框架依赖很小,不遵循JavaBean规范,不像JavaEE开发那样,造成灾难性后果。不得不提,JavaBean规范是契合OO封装概念的,好处也有,例如钩子方法,计算属性,设计模式的扩展,程序易于修改、维护,架构解耦,尤其是向后兼容性,对Web端开发,是必须要遵循的。

当然,对于早期的Android开发来说,重视性能而忽视不遵守JavaBean规范带来的危害性,说得过去。随着生态系统和业务的庞杂,向后兼容性不得不纳入考虑,这时候,Android是不是该拾起那些冗余的get/set方法呢?

不用担心,现在是2014年,C#、Scala等比Java新的面向对象语言自身就提供了语言特性来实现这些常用需求,所以根本不需要Java Bean这样繁琐的约定。C#且不说没有用于Android开发,向后兼容也只能做到源代码级别,微软还是不推荐使用公有字段的。Scala的var或val改为final def的话,无论源代码级的向后兼容性,还是二进制级的向后兼容性,都不遭受破坏。

这种属性定义的方式,已经被很多新型面向对象语言所采纳,例如Dart和Kotlin。恰巧,谷歌已经把Kotlin作为Android开发的官方语言了,而Dart作为Flutter开发框架的编程语言,就更不言而喻了。

这里扯远了。总之,要我在实体类写get/set,要么用DataBinding的ObservableField,要么速速向Kotlin甚至Flutter转型。当然,Java也需要更深层次研究,不能只停留在新语言的语法糖上面而忽视了本质的东西。

阅读更多
换一批

没有更多推荐了,返回首页