成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

在Android項(xiàng)目中使用Java8

junnplus / 1955人閱讀

摘要:現(xiàn)在爸爸終于讓平臺(tái)支持了,這篇文章中便來(lái)和大家聊聊如何在項(xiàng)目中配置使用。要想在項(xiàng)目中使用的新特性,需要將你的升級(jí)到及以上版本,并采用新的編譯。

轉(zhuǎn)載請(qǐng)注明出處:https://zhuanlan.zhihu.com/p/23279894

前言

在過(guò)去的文章中我介紹過(guò)Java8的一些新特性,包括:

Java8新特性第1章(Lambda表達(dá)式)

Java8新特性第2章(接口默認(rèn)方法)

Java8新特性第3章(Stream API)

之前由于Android平臺(tái)不支持Java8,如果我們想在Android項(xiàng)目中使用Lambda表達(dá)式、Stream API等Java8中的新特性就必須使用Retrolambda、Lightweight-Stream-API等第三方開(kāi)源庫(kù)來(lái)實(shí)現(xiàn)。現(xiàn)在Google爸爸終于讓Android平臺(tái)支持Java8了,這篇文章中便來(lái)和大家聊聊如何在Android項(xiàng)目中配置使用Java8。

遺憾的是目前Android平臺(tái)僅支持Java8的部分新特性,當(dāng)我們?cè)陂_(kāi)發(fā)面向Android N及以上版本的應(yīng)用時(shí)(即minSdkVersion>=24),可以使用如下新特性:

Lambda表達(dá)式(Lambda Expressions)(也可以在minSdkVersion<24的情況下使用)

方法引用(Method References)(也可以在minSdkVersion<24的情況下使用)

Stream API(Streams)

接口默認(rèn)方法(Default Methods)

重復(fù)注解(Repeating Annotations)

簡(jiǎn)單的說(shuō)就是現(xiàn)在你的項(xiàng)目要想使用Stream API、接口默認(rèn)方法和重復(fù)注解就要求你的minSdkVersion>=24,而Lambda表達(dá)式和方法引用則對(duì)minSdkVersion無(wú)要求。關(guān)于這些新特的使用及分析可以看看我之前的文章。

Jack(Java Android Compiler Kit)

要想在Android項(xiàng)目中使用Java8的新特性,需要將你的Android Studio升級(jí)到2.1及以上版本,并采用新的Jack(Java Android Compiler Kit)編譯。新的 Android 工具鏈將 Java 源語(yǔ)言編譯成 Android 可讀取的 Dalvik 可執(zhí)行文件字節(jié)碼,且有其自己的 .jack 庫(kù)格式,在一個(gè)工具中提供了大多數(shù)工具鏈功能:重新打包、壓縮、模糊化以及 Dalvik 可執(zhí)行文件分包。

以下是構(gòu)建 Android Dalvik 可執(zhí)行文件可用的兩種工具鏈的對(duì)比:

舊版 javac 工具鏈:
javac (.java --> .class) --> dx (.class --> .dex)

新版 Jack 工具鏈:
Jack (.java --> .jack --> .dex)

配置

為了在項(xiàng)目中使用Java8,我們還需要項(xiàng)目module中的gradle.build文件中加入如下代碼:

android {

  compileSdkVersion 24
  buildToolsVersion "24.0.3"
    
  defaultConfig {
    
    applicationId "me.baron.hellojava8"
    minSdkVersion 24
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
        
    jackOptions {
      enabled true
    }
  }
  
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}
使用

進(jìn)行上述配置后大家就可以在Android項(xiàng)目中盡情的探索使用Java8的新特性了。比如之前我們實(shí)現(xiàn)button的點(diǎn)擊事件時(shí)需要這這樣寫:

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setText("lalala");
       }
});

現(xiàn)在我們便可以使用Java8的Lambda表達(dá)式來(lái)實(shí)現(xiàn)了:

button.setOnClickListener(v -> v.setText("lalala"));

如果你項(xiàng)目的minSdkVersion>=24,我們還可以使用Stream API。比方說(shuō)有一個(gè)形狀集合shapes,現(xiàn)在我們想把所有藍(lán)色的形狀提取到新的List里。通過(guò)Stream API則可以很輕易的辦到:

List blue = shapes.stream()
                          .filter(s -> s.getColor() == BLUE)
                          .collect(Collectors.toList());
總結(jié)

Java8的新特性并不是本文的重點(diǎn),對(duì)此有興趣的同學(xué)可以去翻看我之前的文章。當(dāng)前Jack編譯器還有諸多限制,比如在使用新的Jack工具鏈時(shí)會(huì)禁用Instant Run以及前面提到的新特性對(duì)我們的最低支持版本和編譯版本有要求等等(我猜想Jack對(duì)Buck、Layoutcast、Freeline等編譯方案也會(huì)有影響,沒(méi)做過(guò)驗(yàn)證,有了解的同學(xué)可以在評(píng)論區(qū)留言和大家交流下);總之要想在Android項(xiàng)目中愉快的使用Java8全部的新特性還需時(shí)日。期待Google爸爸盡快優(yōu)化吧!

參考資料:

https://developer.android.com/guide/platform/j8-jack.html

https://medium.com/@sergii/java-8-in-android-n-preview-76184e2ab7ad

===

如果大家喜歡這一系列的文章,歡迎關(guān)注我的知乎專欄、GitHub、簡(jiǎn)書博客。

知乎專欄:https://zhuanlan.zhihu.com/baron

GitHub:https://github.com/BaronZ88

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66518.html

相關(guān)文章

  • 好文章必讀 - 收藏集 - 掘金

    摘要:方法即為收集器,它接收高階函數(shù)和的后端掘金年的第一天,我坐在獨(dú)墅湖邊,寫下這篇文章。正因如此,所以最全系列教程后端掘金是從版本開(kāi)始引入的一個(gè)新的,可以替代標(biāo)準(zhǔn)的。 設(shè)計(jì)模式之單例模式 - 掘金前言 作為一個(gè)好學(xué)習(xí)的程序開(kāi)發(fā)者,應(yīng)該會(huì)去學(xué)習(xí)優(yōu)秀的開(kāi)源框架,當(dāng)然學(xué)習(xí)的過(guò)程中不免會(huì)去閱讀源碼,這也是一個(gè)優(yōu)秀程序員的必備素養(yǎng),在學(xué)習(xí)的過(guò)程中很多人會(huì)遇到的障礙,那就是設(shè)計(jì)模式。很多優(yōu)秀的框架會(huì)運(yùn)...

    FrozenMap 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<