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