1. ホーム
  2. java

[解決済み] メソッドのオーバーロード:両方のメソッドが同じ消去を持つ

2022-02-05 18:28:38

質問

次のようなコードがあるのですが、うまくいきません。 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 : エラーを発生させずにメソッドのオーバーロードを実現するにはどうすればよいですか?

どのように解決するのですか?

<ブロッククオート

エラーを発生させずにメソッドのオーバーロードを実現するにはどうしたらいいですか?

単純に、同じ消去を持つパラメータでメソッドをオーバーロードしようとしないことです。

いくつかのオプションがあります。

  1. メソッドに異なる名前を付けるだけ(つまりオーバーロードを使おうとしない)。
  2. 曖昧さをなくすために、オーバーロードのひとつにさらなるパラメータを追加します。 必要 しかし、Java APIには、オーバーロードの問題を避けるために、単にジャンク・パラメータが存在する例があります)。
  3. で提案されているように、型変数をバインドしました。 かやまん :

    <V extends SomethingOtherThanObject>