我遇到了一个很难理解为什么会发生这种情况的问题。
我有一个泛型类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一起编译
答案 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> { ... }
您的代码将编译