作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
遇到一个有趣的问题;下面的类编译:
public class Test {
public static void main(String[] args) throws Exception {
A a = new A();
B b = new B();
foo(a);
foo(b);
}
private static void foo(A a) {
System.out.println("In A");
}
private static void foo(B b) {
System.out.println("In B");
}
private static class A {}
private static class B extends A {}
}
但是这个失败了:
public class Test {
public static void main(String[] args) throws Exception {
A<String> a = new A<>();
B b = new B();
foo(a);
foo(b);
}
private static void foo(A<String> a) {
System.out.println("In A");
}
private static void foo(B b) {
System.out.println("In B");
}
private static class A<T> {}
private static class B extends A {}
}
出现此错误:
Test.java:8: error: reference to foo is ambiguous, both method foo(A<String>) in Test and method foo(B) in Test match
foo(b);
^
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
我原以为,由于类型删除,它们本质上是相同的。有人知道这里发生了什么吗?
最佳答案
原因是您混合了泛型和原始类型(B 应该声明为 class B<T> extends A<T>
或 class B extends A<SomeType>
)。
发生这种情况的真正原因隐藏在 the JLS, section #15.12.2.7 中的某处。和以下 - 祝你好运简洁地表达它;-)
关于java - 重写方法中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15957618/
我是一名优秀的程序员,十分优秀!