新聞中心
摘要: 今天早上,Google 發(fā)布了 AS 3.0,以及一系列的 Support 包,有意思的新東西挺多,因?yàn)橹耙恢痹诳?kotlin的支持,特地翻了一下對(duì) Java8 的支持方式,結(jié)果……
本文開源實(shí)驗(yàn)室原創(chuàng),轉(zhuǎn)載請(qǐng)以鏈接注明:https://kymjs.com/code/2017/10/26/01/
支持 Java 8
kotlin 相關(guān)的東西很早以前我就在講了,這里就不再細(xì)說(shuō)了。AS3里面有一個(gè)亮眼的特性就是支持J8。首先說(shuō)一下為什么以前我們不能用Java8的新特性,最主要的原因就是 lambda 語(yǔ)法。在 JVM 中,Java8 的語(yǔ)法是通過(guò)一個(gè)叫做invokedynamic的字節(jié)碼操作命令完成的,但是這東西在 dalvik 中并沒有,因此一直不能用。
現(xiàn)在AS3.0之所以能用,實(shí)際上是在新的Android Studio中加入了一個(gè)desugar的東西,他就類似JVM上的invokedynamic,把Java8的字節(jié)碼翻譯成dalvik可識(shí)別的。
官網(wǎng)介紹:
Android Studio provides built-in support for using certain Java 8 language features and third-party libraries that use them. As shown in figure 1, the default toolchain implements the new language features by performing bytecode transformations, called desugar, on the output of the javac compiler.
desugar 能干啥
首先看張官方圖:
在 javac 執(zhí)行后,desugar 會(huì)對(duì) class 做操作,將內(nèi)部的lambda相關(guān)的語(yǔ)法轉(zhuǎn)換為dalvik可識(shí)別的語(yǔ)法。
說(shuō)的太抽象具體表現(xiàn)我們看代碼。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new Thread(() -> { Log.d("kymjs", "========"); }).start(); }
文章標(biāo)題:AndroidStudio3支持Java8了請(qǐng)問(wèn)你敢用嗎-創(chuàng)新互聯(lián)
本文地址:http://www.dlmjj.cn/article/dhpche.html