Java 関数型インターフェースのサンプル(Callable)

Javaの関数型インターフェースのCallableのサンプルです。

目次

サンプル Callableインターフェース
クラスにCallableインターフェースを実装する
例外が発生する場合
  匿名クラスでCallableインターフェースを使用する

Callableインターフェース

インターフェース public interface Callable<V>
メソッド V call() throws Exception
  • Callableは、入力なしで出力があります。Vは戻り値の型です。
  • Callableインターフェースを実装したクラスはcallメソッドのオーバーライドが必要です。
  • マルチスレッドで使用されます。
  • Callableは呼び出し可能という意味です。
  • 以下は、OracleのJava8のCallableインターフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/util/concurrent/Callable.html

関数型インターフェースのCallableのサンプルです。

package test1;

import java.util.concurrent.Callable;

public class Test1 {
	public static void main(String[] args) {
		Callable<String> make1 = () -> {
			return "red";
		};

		try {
			System.out.println(make1.call()); // red
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}

3行目は、Callableをimportしています。

7行目は、Callableインターフェースを使用したラムダ式です。
Callable<String>の
Stringは、Callable<V>のVで戻り値の型です。

12行目は、callメソッドでStringの値を返します。try-catchは必須でないとコンパイルエラーになります。

 

クラスにCallableインターフェースを実装する

package test1;

import java.util.concurrent.Callable;

public class Test1 {
	public static void main(String[] args) {

		Make1 make1 = new Make1();
		try {
			System.out.println(make1.call()); // red
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
class Make1 implements Callable {
	@Override
	public String call() throws Exception {
		return "red";
	}
}

10行目は、callメソッドです。戻り値があります。
16行目は、Callableインターフェースを実装しています。

 

例外が発生する場合

package test1;

import java.util.concurrent.Callable;

public class Test1 {
	public static void main(String[] args) {

		Make1 make1 = new Make1();
		try {
			System.out.println(make1.call());
		} catch (Exception e) {
			System.out.println(e); //java.lang.ArithmeticException: / by zero
		}
	}
}
class Make1 implements Callable<String> {
	@Override
	public String call() throws Exception {
		int num = 10 / 0;
		return "red";
	}
}

19行目は、0で割るため例外が発生します。
例外は、11行目でcatchされます。

 

匿名クラスでCallableインターフェースを使用する

package test1;

import java.util.concurrent.Callable;

public class Test1 {
	public static void main(String[] args) {

		try {
			String str = new Callable<String>() {
				@Override
				public String call() throws Exception {
					return "red";
				}
			}.call();
			
			System.out.println(str); //red
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

9行目は、匿名クラスです。クラス名はありません。
14行目は、callメソッドです。戻り値は9行目の変数strにセットされます。

関連の記事

Java ラムダ式で関数型インターフェースを使用
Java Stream APIでリストを操作する(stream)

△上に戻る