gpt4 book ai didi

java - 重写方法中的泛型

转载 作者:搜寻专家 更新时间:2023-10-30 19:46:03 31 4
gpt4 key购买 nike

遇到一个有趣的问题;下面的类编译:

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com