LoginSignup
192
187

More than 5 years have passed since last update.

Androidでラムダ式を使いたい

Last updated at Posted at 2014-05-15

Java 8が正式リリースされ早2か月。
やっとJavaでラムダ式が正式に使えるようになって嬉しい限り。

とはいえ、AndroidはAPI 19でJava 7がやっとサポートされたばかり。
でも諦めるのは早い。Retrolambdaがある!

Retrolabmdaとは

  • ラムダ式をJava 7, 6, 5で使えるようにしたバックポートツール
  • Java 8でコンパイルされたバイトコードをJava 7以下の環境で動作するように変換
  • バックポートするのはラムダ式だけ。ほかのJava 8の機能はなし。
  • gradle-retrolambdaというgradleのプラグインがある。

Retrolambdaを使うための設定

JDK 8をインストールする

OracleのサイトからJDK 8をダウンロードする。

環境変数JAVA8_HOMEを設定する。
Macの場合/usr/libexec/java_homeでインストールされているJDKのパスがわかるので、これを使って環境変数を設定しておくといい。

JAVA8_HOME=`/usr/libexec/java_home -v "1.8" -F`
if [ $? -eq 0 ]; then
    export JAVA8_HOME
fi

のようにしておくといいかも。

gradle-retrolambda

build.gradle
buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'me.tatarka:gradle-retrolambda:+'
    }
}

repositories {
  mavenCentral()
}

apply plugin: 'android'
apply plugin: 'retrolambda'

retrolambda {

}

IntelliJ/Android Studioの設定

build.gradle
android {
    ....
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

のように設定すると、

[File]-[Project Structure]-[Project]で

  • [Project SDK]が1.8に
  • [Project language level]が8.0 - Lambdas, type annotations etc.

に変わる。

ラムダ式の使いどころ

ラムダ式のありがたみについては、ここではあんまり書かないけど、
抽象メソッドが1つだけのインターフェースに使えるので以下のようなことができる。

リスナー

Button b = new Button(this);
b.setOnClickListener((View view) -> {
  // 処理
});

引数の型を省略できるので

b.setOnClickListener((view) -> {
  // 処理
});

引数が一つだと括弧も省略できるので

b.setOnClickListener(view -> {
  // 処理
});

と書ける。

Runnable

Handler handler = new Handler();
handler.post(() -> {
  // 処理
});
192
187
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
192
187