私はJava用の小さなライブラリを作っていましたが、APIの一部は3つの引数をとった機能的なインターフェイス(したがってラムダ式)でした。私はそれらの2つがしばしば望ましくないかもしれないことに気づいた。だから私はこのような何かを作るために考えた:Javaなぜ機能的なインターフェイスで複数の継承を使うことができないのですか?
class Main {
public static void main(String[] args) {
call((s) -> System.out.println(s));
}
static void call(A a) {
a.call(7, 42, "Hello World!");
}
static interface A {
void call(int x, int y, String s);
}
static interface B extends A {
void call(String s);
default void call(int x, int y, String s) {
call(s);
}
}
}
私は、彼らが望んでいた場合、ユーザーは、最初の2つのパラメータを挿入することもできますが、彼らはしなかった場合、彼らはそれらを残すことができると、彼らは無視されるだろうと予想しました。しかし、上記のコードをコンパイルしようとすると、コンパイル時に "互換性のない型:ラムダ式の互換性のないパラメータ型"というメッセージが出ます。なぜこれは機能しませんか?
[ラムダを '(B)'](https://ideone.com/AO1KKo)にキャストすればコードは正常に動作します。それ以外の場合は、 'A'だけを実装するオブジェクトを作成していると仮定します。 – 4castle