小编Tim*_*ole的帖子

当单独的方法只有一个有效时,为什么这个 Java 泛型方法调用是不明确的?

我试图理解为什么编译器无法解析bar方法调用。我希望bar(Xyz::new)始终选择bar(Supplier)因为bar(T extends Xyz)由于 的上限而永远无法匹配Xyz

public <T extends Xyz> void foo(T s) {}
public <T extends Xyz> void bar(T s) {}
public <T extends Xyz> void bar(Supplier<T> s) {}

public void example() {
    foo(Xyz::new); // not valid (does not extend Xyz)

    bar((Supplier<Xyz>) Xyz::new); // valid (explicitly a Supplier)
    bar(Xyz::new); // ambiguous - but only one method is valid?
}

public static class Xyz {}
Run Code Online (Sandbox Code Playgroud)

如果bar(T)不适用,即使单独使用(如 所示foo(T)),那么唯一的选择肯定是bar(Supplier) …

java generics overload-resolution

30
推荐指数
2
解决办法
2328
查看次数

标签 统计

generics ×1

java ×1

overload-resolution ×1