次のコードがあり、機能しません:エラー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
の子です。2番目のケースと同様に、B
はA
の子です。では、なぜ最初のケースはエラーになりますが、2番目のケースは正常にコンパイルされますか?
[〜#〜] edit [〜#〜]:エラーを発生させずにメソッドのオーバーロードを実現するにはどうすればよいですか?
エラーを発生させることなく、メソッドのオーバーロードを実現するにはどうすればよいですか?
シンプル:同じ消去のパラメーターでメソッドをオーバーロードしないでください。
いくつかのオプション:
@ Kayaman で提案されているように、type変数をバインドします。
<V extends SomethingOtherThanObject>
V
は「Object
の子」ではありません。 V
は無制限のジェネリック型であり、Object
に消去され、エラーが発生します。 <V extends Comparable<V>>
などのジェネリック型がバインドされている場合は、Comparable
に消去され、エラーは発生しません。