我有以下代码但不起作用:出现错误both methods have same erasure
。
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(V value) {
}
public void Bar(Object value) {
}
}
我也有这段代码:
public class Foo<V> {
public static void main(String[] args) {
}
public void Bar(B value) {
}
public void Bar(A value) {
}
}
class A {
}
class B extends A {
}
这很有效。在第一种情况下,V
是Object
的孩子,就像在第二种情况下B
是A
的孩子一样。那么为什么第一种情况导致错误,而第二种情况成功编译?
编辑:如何在不引发错误的情况下实现方法重载?
答案 0 :(得分:17)
如何在不引发错误的情况下实现方法重载?
简单:不要尝试使用相同擦除的参数重载方法。
一些选择:
按照@Kayaman:
的建议绑定类型变量<V extends SomethingOtherThanObject>
答案 1 :(得分:6)
V
不是“Object
的孩子”。 V
是一个无限制的泛型类型,会删除到Object
,从而导致错误。如果通用类型有界限,例如<V extends Comparable<V>>
,它将擦除Comparable
,您将不会收到错误。