前言
java语言自从走入SE8版本就异常的让开发者感到兴奋,随之而来的rxjava系列等(相似于javaScript的Promise A+)的functional programing瞬间风起云涌,另很多java开发者眼前一亮 而且看到了java的闪亮的将来html
可是,做为android平台的一名App开发者,若是咱们想在android App开发过程当中使用java8的新特性那可能就另当别论了,所以今天这篇随笔就来讨论讨论“如何在android应用开发中使用java8新特性”java
android和java
当咱们一开始接触android应用开发的那刻起,咱们就被告知使用java语言来编写android程序,咱们要安装java环境,在IDE中使用java的API去编写代码逻辑。咱们使用java 6/7中java EE代码中常见的几乎全部语法和代码;咱们不多发现当把一些java EE项目的java代码原封不动移植到android应用中会出现什么问题,而且咱们不多被告知android sdk的API实质上只是标准java SE API的一个子集;另外,不多有人学习完用如何用Activity、Fragment等控件结合简单的java代码写出一个能够在手机上运行后紧接着去继续学习,去继续学习android frameWork以及native层与Linux底层的实现。react
在这里我不想大谈特谈android的实现机制和原理,只想抛砖引玉的提醒一下:android
android !=javagit
为什么须要使用java8的新特性
若是你能了解下“函数式编程(functional programing)”以及“响应式编程(reactive programing)”的魅力的话,那么你就会慢慢喜欢上他,简洁、高效的风格,若是从前你的业务逻辑代码是“面向数据抽象”的那么有了他们那就是“面向行为抽象”了github
来点栗子吧,好比下面这段代码编程
int count = 0;for(Artist artist:allArtists){if(artist.isFrom("London")){
count++;
}
}
或者使用Iterator
其实彻底能够写成这样:ide
long count =allArtists.stream()
.filter(artist->artist.isFrom("London"))
.count();
一目了然。。。函数式编程
具体java8中lambda表达式以及集合类中的stream的进阶知识不在这里讲解了,今天的目的是介绍在android开发当中如何使用java8特性函数
如何作
如今的android sdk已经能够正常使用java7以前全部语言特性了,但java8仍然只能在个别sdk level上使用,如连接里面android developer文档中所述,使用jack可让android使用部分java8的特性,并且仍然受困于sdk的版本支持;
那么如何作?才能够尽情的使用java8的语言特性在android中任何sdk版本中畅游呢?
gradle-retrolambda
https://github.com/evant/gradle-retrolambda,在android studio的构建工具gradle中使用该plugin,即可以作到在任何sdk版本种使用java 8语言新特性了。
固然,若是你仔细思考下它实现的原理不难发现,其实他跟jack相似工做在.class文件跟.dex文件这个阶段,它实质上是吧你编写的java8代码转化为java6/7的代码了而已,但即使如此,java8语言特性所带来的业务逻辑代码“可读性、可维护性”仍然是很是具备价值的