Java でジェネリックを使用する場合、生の型を使用することの影響を理解することが重要です。 raw 型は、型パラメーターが指定されていない単なるジェネリック型への参照です。
問題
次のコードを考えてみましょう:
ArrayList<String> a = new ArrayList<>(); String[] s = a.toArray(new String[0]);
toArray は
ArrayList a = new ArrayList(); String[] s = a.toArray(new String[0]);
コンパイラは、String[] が必要であるが Object[] が見つかったことを示すエラーを生成します。これは、コンパイラーが、引数として String[] を受け取っているにもかかわらず、ジェネリック メソッドが Object[] を返すものとして解釈するためです。
生の型について
この動作を理解するには、次のようにします。 raw 型を使用すると、型パラメータを指定できなくなることを認識することが重要です。 Java 言語仕様 (JLS) では、生の型について次のように規定されています。
「スーパークラスまたはスーパーインターフェイスから継承されていない生の型 C のコンストラクター、インスタンス メソッド、または非静的フィールド M の型」は、C に対応するジェネリック宣言内の型の消去に対応する生の型です。"
言い換えると、生の型内のすべてのジェネリック メソッドとフィールドは、あたかも生の型であるかのように扱われます。
ジェネリック メソッドの影響
これは、ジェネリック メソッド呼び出しのターゲットとして raw 型を使用すると、コンパイラは推論できないことを意味します。メソッドの型パラメータ。その結果、メソッドは引数の型パラメータに対してのみジェネリックであるとみなされます。この例では、String[] 引数を渡したので、toArray メソッドは
参考文献
以上がJava でジェネリック メソッドで生の型を使用すると型エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。