java extends Generic types ambiguous method call

时间:2017-09-21 09:43:12

标签: java generics

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

我有一个泛型类B,它扩展了泛型类A,我有两个方法接受A和B.从方法接受A我想用参数B调用方法 但这会导致编译错误:

  

模糊的方法调用。 Main和方法中的方法(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一起编译

1 个答案:

答案 0 :(得分:2)

您的班级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> { ... }

您的代码将编译