par*_*cer 9 java generics jvm javac
我有以下代码,它不起作用: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) {
}
}
Run Code Online (Sandbox Code Playgroud)
我也有这个代码:
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 {
}
Run Code Online (Sandbox Code Playgroud)
这很有效.在第一种情况下V是一个孩子Object,就像在第二种情况下B是一个孩子A.那么为什么第一种情况导致错误,而第二种情况成功编译?
编辑:我应该怎么做才能实现方法重载,而不会引发错误?
And*_*ner 19
如何在不引发错误的情况下实现方法重载?
简单:不要尝试使用相同擦除的参数重载方法.
一些选择:
按照@Kayaman的建议绑定类型变量:
<V extends SomethingOtherThanObject>
Run Code Online (Sandbox Code Playgroud)V不是"孩子的Object".V是一个无限制的泛型类型,它会删除Object,从而导致错误.如果泛型类型有界限,例如<V extends Comparable<V>>,它将擦除Comparable并且您不会得到错误.
| 归档时间: |
|
| 查看次数: |
14469 次 |
| 最近记录: |