Android Studio中如何支援使用Lambda表示式
Java8引入了lambda表示式,Lambda 表示式”(lambda expression)是一個匿名函式,本質上就是可以傳遞給其他函式的一小段程式碼。
下面來看一下如何讓自己的專案支援使用lambda表示式,以達到簡化程式碼的目的。
先來舉個栗子,看看我們平常寫點選事件是如何寫的
普通寫法:
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//處理邏輯
}
});
Lambda表示式寫法
tv.setOnClickListener(v->Toast.makeText(this,"this is lambda",Toast.LENGTH_SHORT).show());
是不是程式碼變得簡潔了很多。
下面就介紹一下使用Android studio 3.0.1新建專案,配置支援Lambda表示式。
gradle android外掛版本為:classpath 'com.android.tools.build:gradle:3.0.1'
可能有以下三種情形:
(1)整合了Kotlin環境,但專案是混合開發的,.java和.kt的程式碼都有。
此時,在.kt的程式碼中可以直接使用lambda表示式,而在java程式碼中,如果直接使用的話,會報如下提示
Lambda expressions are not supported at this language level
此時,我們只需要在app的build.gradle中的android{ }內新增如下配置即可。
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
(2)純Kotlin開發環境,只在Kotlin程式碼中使用lambda表示式
Kotlin標準庫大量的使用了lambda表示式,所以在Kotlin程式碼中可以直接使用。只要有Kotlin環境的基本配置即可。
button.setOnClickListener { v -> Toast.makeText(applicationContext,"this is lambda",Toast.LENGTH_SHORT).show() }
(3)純Java程式碼開發環境,沒有引入Kotlin支援庫。
也只需要在app的build.gradle中的android{ }內新增如下配置即可。
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
綜上,正常情況下,其實要支援lambda,只要新增上面compileOptions 的配置就行了。
配置到我自己的專案
我也是在app.build中新增:
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
很簡單吧,但是當我配置到我自己專案的時候,居然!!!出錯了.......竟然如此尷尬......
(我專案的gradle外掛版本是: classpath 'com.android.tools.build:gradle:2.2.2' ,專案配置了Kotlin環境,Kotlin版本是: ext.kotlin_version = '1.2.10' 的)
編譯報錯:Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.
於是我搜尋了一下解決辦法,說是在app.build中加入jackOptions 中就行了。
defaultConfig {
jackOptions {
enabled true
}
}
同步了一下,結果.....並沒有成功!報下面的錯誤:
Kotlin Gradle plugin does not support the deprecated Jack toolchain.Disable Jack or revert to Kotlin Gradle plugin version 1.1.1.
遇到這種工程構建的錯誤,確實是挺煩人的,但是大家一定要有耐心,仔細查錯,不要著急。
按照上面提示:Kotlin版本不支援配置jackOptions ,要我把版本Kotlin改成1.1.1。OK,那就把Kotlin版本改成1.1.1咯,同步一下,OK。但是發現這樣的方式,導致專案構建很慢,於是乎又找了另外一種方法配置。
簡單一步到位的配置支援Lambda
針對我的專案從頭開始,手動去新增支援lambda的外掛,也是OK的,這樣一步到位,不會出錯,完整的配置為:
工程的build.gradle中新增
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
//classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
//java中支援lambda
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
}
app.gradle中新增
//apply plugin: 'android-apt'
//java中支援lambda
apply plugin: 'me.tatarka.retrolambda'
android{
compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}
}
搞定!!!(android-apt外掛可配可不配都行)
相關文章
- 在Android Studio中使用Lambda表示式Android
- Java中Lambda表示式的使用Java
- source 1.5 中不支援 lambda 表示式, Deployment failed repository elementAI
- lambda 表示式使用的方式
- Java lambda表示式基本使用Java
- Java 中的 Lambda 表示式Java
- lambda 表示式
- lambda表示式
- Python中lambda表示式的用法Python
- Java中lambda表示式詳解Java
- Java中Lambda表示式基礎及使用詳解Java
- Java | Lambda表示式Java
- 【Kotlin】Lambda表示式Kotlin
- CPP lambda表示式
- 八,Lambda表示式
- Python Lambda 表示式Python
- Lambda表示式(Java)Java
- Java Lambda表示式Java
- Python - lambda 表示式Python
- kotlin lambda表示式Kotlin
- Java中Lambda表示式的應用Java
- Java8中的Lambda表示式Java
- C# Lambda表示式詳解,及Lambda表示式樹的建立C#
- Java中使用lambda表示式自定義排序Java排序
- Python中lambda表示式的優缺點及使用場景Python
- Java 8 Lambda 表示式Java
- Java的Lambda表示式Java
- Lambda表示式總結
- java 8 lambda表示式Java
- C#lambda表示式C#
- cpp的lambda表示式
- 淺談lambda表示式
- Lambda表示式詳解
- C++ Lambda 表示式C++
- C++Lambda表示式C++
- Java之lambda表示式Java
- Java中Lambda表示式的進化之路Java
- kotlin 函式和 Lambda 表示式Kotlin函式