这样的重载会引入歧义,并要求调用方将 lambda 转换为特定类型或显式指定 lambda 参数类型。 最好为重载方法赋予不同的名称,以消除歧义。
示例:
interface MyExecutor {
void execute(Supplier<?> supplier);
void execute(Callable<?> callable);
}
这里的 Supplier
和 Callable
为功能接口,其单抽象方法不接受任何参数并返回非 void 值。
因此,除非使用显式转换,否则无法在调用点推断 lambda 的类型。