Androidは必ず-Android Studioの下でLambdaを構成し、使用することを知っています.
8733 ワード
モバイル側のアクセスが悪い場合は、->Github版にアクセスしてください.
背景
友人と
Lambda式とは
Lambda式では、動作を関数に伝えることができます.Java 8以前に動作を関数に転送するには、匿名クラスのみを選択し、6行のコードが必要です.動作を定義する最も重要な行のコードは、真ん中に混じって強調されていません.Lambda式は匿名クラスの代わりにテンプレートをキャンセルし,関数スタイルでコードを記述できるようにした.これにより、可読性がより良く、表現がより明確になることがあります.
-Java 8 lambda式10例
上の文字を読み終わっても特に分かりませんが、私たちが日常的にAndroidを開発しているのは、匿名関数の使用を簡略化しているので、以下の例で簡単に感じることができます.もっと興味があれば、文末にもっと収集した資料を読むことができます.
Lamdbaの例
Lambda式によるRunnableの実装
lambda式を使用して匿名クラスを置き換えることができ、
出力:
この例では、Java 8 lambda式の構文を示し、
たとえば、パラメータを変更、書き換えずにコンソールで何かを印刷する方法であれば、次のように書くことができます.
2つのパラメータをメソッドで受信する場合は、次のように書くことができます.
Lambda式によるイベント処理
Androidの日常開発では、
このような対比は簡潔で多いのではないでしょうか.では、複数のパラメータの
以上の2つの例は、日常のAndroid開発で最もよく使われている例ですが、Java 8 lambda式10の例にアクセスしてください.
Lambdaの有効化
基本的な要件は次のとおりです. Android Studio 2.1+ JAVA 8 を取り付ける
方式1:Google公式方式
新しいJava 8言語機能を使用するには、新しいJackツールチェーンも必要です.新しいAndroidツールチェーンはJavaソース言語をAndroid読み取り可能なDalvik実行可能ファイルバイトコードにコンパイルし、独自のものを持つ.jackライブラリフォーマットは、1つのツールでほとんどのツールチェーン機能を提供します.再パッケージ、圧縮、ぼかし、Dalvik実行可能ファイルパケットです.
以下は、Android Dalvik実行可能ファイルを構築するために使用できる2つのツールチェーンの比較です.
旧版javacツールチェーン:
既知の問題Instant Runは現在Jackでは使用できません.新しいツールチェーンを使用すると無効になります.
Java 8言語機能
方式二:サードパーティJava 8互換プラグインの使用
以下はプラグインの
本人のプロジェクトでは、多くの不要なエラーを回避するために、次のように構成されています.
/build.gradle
/app/build.gradle
私が使用中にいくつかの構成が増えているのが見えますが、このプラグインの
一般的なErrorおよび解決策
Couldnot find property ‘options’ on task ‘:app:compileDebugJavaWithJack’.
理由:Google公式方式を使うと互換性があり、Jackを使う時にAPTを同時に使うことができず、butterknife、Daggerなどを使うとAPTの注釈フレームワークが使えなくなる
ソリューション:retrolambdaの互換プラグインを使用してlambdaを有効にする
Doesn’t seem to correctly use modified lombok version
理由:ここを参照
解決策:私が書いたように、この問題は発生しません.
まとめ
味見したい開発者にとってLamdbaを有効にするのはいい選択ですが、結局これは徐々に普及していきます.Lamdbaの使い方をもっと知りたい人のために集めた資料と、本稿で参考にした文章を以下に示します. jdk1.8新しい特性のlambda式およびAndroid Studioでの使用 Java 8 lambda式10例 Java 8チュートリアル Error:Could not find property ‘options’ on task ‘:app:compileDebugJavaWithJack’. Doesn’t seem to correctly use modified lombok version retrolambdaプラグイン PS:
Github、CSDN、マイクロブログに注目してください.
転載先:https://www.cnblogs.com/wuyida/p/6300459.html
背景
友人と
JAVA8
の新しい特性を討論して、Lambda
について話して、ちょうど掘金の上で1篇の関連する文章を見て、資料を結びつけて、1つの総括をして、特に実際の使用の中で出会った問題を記録します.Lambda式とは
Lambda式では、動作を関数に伝えることができます.Java 8以前に動作を関数に転送するには、匿名クラスのみを選択し、6行のコードが必要です.動作を定義する最も重要な行のコードは、真ん中に混じって強調されていません.Lambda式は匿名クラスの代わりにテンプレートをキャンセルし,関数スタイルでコードを記述できるようにした.これにより、可読性がより良く、表現がより明確になることがあります.
-Java 8 lambda式10例
上の文字を読み終わっても特に分かりませんが、私たちが日常的にAndroidを開発しているのは、匿名関数の使用を簡略化しているので、以下の例で簡単に感じることができます.もっと興味があれば、文末にもっと収集した資料を読むことができます.
Lamdbaの例
Lambda式によるRunnableの実装
lambda式を使用して匿名クラスを置き換えることができ、
Runnable
インタフェースを実装することは匿名クラスの最良の例である.Java 8以前のrunnable
実装方法では,4行のコードが必要であったが,lambda
式では1行のコードしか必要としなかった.匿名クラス全体を() -> {}
コードブロックで置き換えるだけです.// Java 8 :
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(" Java8 , ");
}
}).start();
//Java 8 :
new Thread( () -> System.out.println(" Java8, Lambda ") ).start();
出力:
Java8 ,
Java8, Lambda
この例では、Java 8 lambda式の構文を示し、
lambda
を使用して次のコードを書くことができます.(params) -> expression
(params) -> statement
(params) -> { statements }
たとえば、パラメータを変更、書き換えずにコンソールで何かを印刷する方法であれば、次のように書くことができます.
() -> System.out.println("Hello World");
2つのパラメータをメソッドで受信する場合は、次のように書くことができます.
(int a, int b) -> a + b
Lambda式によるイベント処理
Androidの日常開発では、
setOnClickListener
、setOnItemClickListener
など、さまざまなイベントを設定していますが、前後の書き方の変化を比較してみましょう.//
viewA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Do something
}
});
// lambda
viewA.setOnClickListener(v -> {
//Do something
});
//
viewA.setOnClickListener(View v -> {
//Do something
});
このような対比は簡潔で多いのではないでしょうか.では、複数のパラメータの
setOnItemClickListener
についてどう書きますか.//
xxxListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
//Do something
}
});
// lambda
xxxListView.setOnItemClickListener((parent,view,position,id)->{
//Do something
});
//
xxxListView.setOnItemClickListener((AdapterView> parent, View view, int position, long id)->{
//Do something
});
//
xxxListView.setOnItemClickListener((a,b,c,d)->{
//Do something
});
以上の2つの例は、日常のAndroid開発で最もよく使われている例ですが、Java 8 lambda式10の例にアクセスしてください.
Lambdaの有効化
Lamdba
を有効にするには、Google公式を使用する方法と、サードパーティJava 8互換プラグインを使用する方法と、サードパーティ互換プラグインの使用を推奨する方法の2つがあります.基本的な要件は次のとおりです.
方式1:Google公式方式
新しいJava 8言語機能を使用するには、新しいJackツールチェーンも必要です.新しいAndroidツールチェーンはJavaソース言語をAndroid読み取り可能なDalvik実行可能ファイルバイトコードにコンパイルし、独自のものを持つ.jackライブラリフォーマットは、1つのツールでほとんどのツールチェーン機能を提供します.再パッケージ、圧縮、ぼかし、Dalvik実行可能ファイルパケットです.
以下は、Android Dalvik実行可能ファイルを構築するために使用できる2つのツールチェーンの比較です.
旧版javacツールチェーン:
javac (.java --> .class) --> dx (.class --> .dex)
新版Jackツールチェーン:Jack (.java --> .jack --> .dex)
GradleプロジェクトにJava 8言語機能とJackを有効にするには、モジュールレベルのbuild.gradleファイルに次のように入力します.android {
...
defaultConfig {
...
jackOptions {
enabled true
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
既知の問題Instant Runは現在Jackでは使用できません.新しいツールチェーンを使用すると無効になります.
Java 8言語機能
方式二:サードパーティJava 8互換プラグインの使用
以下はプラグインの
ReadMe
の構成です.プロジェクトのbuild.gradle
ファイルに次の内容を追加します.buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
}
}
// Required because retrolambda is on maven central
repositories {
mavenCentral()
}
apply plugin: 'com.android.application' //or apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
本人のプロジェクトでは、多くの不要なエラーを回避するために、次のように構成されています.
build.gradle
ファイルはプロジェクトルートディレクトリに1つあり、Moduleの下にも1つあります./build.gradle
buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
classpath 'me.tatarka.retrolambda.projectlombok:lombok.ast:0.2.3.a2'
}
configurations.classpath.exclude group: 'com.android.tools.external.lombok'
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
/app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
私が使用中にいくつかの構成が増えているのが見えますが、このプラグインの
issue
で調べました.構成の説明をよく読んで、実際のプロジェクトの特別なニーズに適応することをお勧めします.一般的なErrorおよび解決策
Couldnot find property ‘options’ on task ‘:app:compileDebugJavaWithJack’.
理由:Google公式方式を使うと互換性があり、Jackを使う時にAPTを同時に使うことができず、butterknife、Daggerなどを使うとAPTの注釈フレームワークが使えなくなる
ソリューション:retrolambdaの互換プラグインを使用してlambdaを有効にする
Doesn’t seem to correctly use modified lombok version
理由:ここを参照
解決策:私が書いたように、この問題は発生しません.
まとめ
味見したい開発者にとってLamdbaを有効にするのはいい選択ですが、結局これは徐々に普及していきます.Lamdbaの使い方をもっと知りたい人のために集めた資料と、本稿で参考にした文章を以下に示します.
Github、CSDN、マイクロブログに注目してください.
転載先:https://www.cnblogs.com/wuyida/p/6300459.html