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にセットされます。
関連の記事