このようなオーバーロードはあいまいさをもたらし、呼び出し元にラムダを特定の型にキャストするか、ラムダパラメーターの型を明示的に指定することを要求します。 あいまいさを排除するため、オーバーロードメソッドには別々の名前を付けることをお勧めします。
例:
interface MyExecutor {
void execute(Supplier<?> supplier);
void execute(Callable<?> callable);
}
ここで、Supplier と Callable はパラメーターを受け取らず、非 void の値を返す単一の抽象メソッドを持つ関数型インターフェースです。
その結果、明示的なキャストが使用されない限り、ラムダの型を呼び出しサイトで推測することはできません。