zoukankan      html  css  js  c++  java
  • android中使用java8新特性lambda表达式

    前言

      java语言自从走入SE8版本就异常的让开发者感到兴奋,随之而来的rxjava系列等(类似于javaScript的Promise A+)的functional programing瞬间风起云涌,另不少java开发者眼前一亮 并且看到了java的闪亮的未来

      但是,作为android平台的一名App开发者,如果我们想在android App开发过程中使用java8的新特性那可能就另当别论了,因此今天这篇随笔就来讨论讨论“如何在android应用开发中使用java8新特性”

    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底层的实现。

      在这里我不想大谈特谈android的实现机制和原理,只想抛砖引玉的提醒一下:

      android !=java

    为何需要使用java8的新特性

      如果你能了解下“函数式编程(functional programing)”以及“响应式编程(reactive programing)”的魅力的话,那么你就会慢慢喜欢上他,简洁、高效的风格,如果从前你的业务逻辑代码是“面向数据抽象”的那么有了他们那就是“面向行为抽象”了

      来点栗子吧,比如下面这段代码

    int count = 0;
    for (Artist artist:allArtists){
         if(artist.isFrom("London")){
              count++;
         }  
    }
    或者使用Iterator

      其实完全可以写成这样:

    long count = allArtists.stream()
                           .filter(artist->artist.isFrom("London"))
                           .count();

      一目了然。。。

      具体java8中lambda表达式以及集合类中的stream的进阶知识不在这里讲解了,今天的目的是介绍在android开发当中如何使用java8特性

    如何做

      https://developer.android.google.cn/guide/platform/j8-jack.html?hl=zh-cn#supported-features  

      现在的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语言特性所带来的业务逻辑代码“可读性、可维护性”仍然是非常具有价值的

  • 相关阅读:
    12.22冲刺总结
    Android远程服务
    短信电话监听
    Android本地服务
    意图
    多线程下载
    异步HTTP请求
    提交数据到服务器
    通过HTTP访问网络资源
    观察者
  • 原文地址:https://www.cnblogs.com/renhuihhh/p/6296441.html
Copyright © 2011-2022 走看看