ホームページ > Java > &#&チュートリアル > Java が同一のジェネリック型消去を持つメソッドを制限するのはなぜですか?

Java が同一のジェネリック型消去を持つメソッドを制限するのはなぜですか?

DDD
リリース: 2024-12-15 00:36:22
オリジナル
643 人が閲覧しました

Why Does Java Restrict Methods with Identical Generic Type Erasure?

メソッド消去のあいまいさ: Java が同様のメソッド シグネチャを制限する理由

Java コンパイラは、「メソッド add(Set) には同じ消去があります」というエラーがスローされます同一のジェネリック型 Erasure を持つ 2 つのメソッドが同じ内で宣言されている場合、Test 型の別のメソッドとして add(Set) を実行します。 class:

class Test {
    void add(Set<Integer> ii) {}
    void add(Set<String> ss) {}
}
ログイン後にコピー

この制限は、生の型を使用する従来のコードでの競合を回避したいという要望から生じています。ジェネリックスが導入される前は、メソッドは次のような生の型を受け取り、返しました。

class CollectionConverter {
    List toList(Collection c) {...}
}
ログイン後にコピー

ジェネリックスの導入後にそのようなクラスを拡張する場合、言語設計者は生の型がジェネリック型と「オーバーライド同等」であるとみなしていました。これにより、シグネチャを変更せずにメソッドをオーバーライドできるようになり、下位互換性が確保されました。

ただし、異なるジェネリック シグネチャを持つ複数のメソッドが許可されると、生の型がまだ使用されている場合にあいまいさが生じる可能性があります。たとえば、クラスがスーパークラス メソッドをオーバーライドする既存の raw メソッドにジェネリック メソッドを追加した場合、コンパイラはどのメソッドを呼び出すかを解決できません。

この潜在的な混乱を避けるために、Java ではクラスが次のメソッドを使用することを禁止しています。

このルールは、異なるジェネリック セット型を渡すようなシナリオでは不便に見えるかもしれませんが、維持するために必要な安全策です。従来のコードとの互換性。これがないと、ジェネリックスを使用するようにコードをアップグレードすると、生の型に依存する既存のコードが壊れる可能性があります。

以上がJava が同一のジェネリック型消去を持つメソッドを制限するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート