Java扩展通用类型的歧义方法调用



我遇到了一个问题,我很难理解为什么会发生这种情况。

i有一个通用B类,它扩展了通用类A,并且我有两种接受A和B的方法。但这导致汇编错误:

模棱两可的方法调用。主要方法(a)和方法 (b)在主比赛中

这是一个代码段:

public class Main {
private static class A<T> {
}
private static class B<T> extends A {
}
public String method(A<String> arg) {
    return method((B<String>) arg));
}
public String method(B<String> arg) {
    return "some result";
}
}

但是,如果我从类型A中删除通用类型,则它会编译:

public class Main {
private static class A<T> {
}
private static class B<T> extends A {
}
public String method(A arg) {
    return method((B<String>) arg));
}
public String method(B<String> arg) {
    return "some result";
}
}

那是什么原因?

编辑:此问题与Java 8有关,因为此代码与JDK7

可以编译

您的类B扩展了A,但没有指定其界限或任何通用信息

我的意思是你的行

private static class B<T> extends A { ... }

等于

private static class B<T> extends A<Object> { ... }

将其更改为

private static class B<T> extends A<T> { ... }

您的代码将编译

相关内容

  • 没有找到相关文章

最新更新