2016-07-04 5 views
3

私はJavaで汎用クラスの配列を作成できないことを理解しています。 ジェネリックアレイの作成に関するrawtypesコンパイラの警告

private static final Class<String>[] ARGUMENT_TYPE = new Class<String>[]{String.class}; 

は、だから私は生のタイプを使用している:

private static final Class[] ARGUMENT_TYPE = new Class[]{String.class}; 

をしかし、今のJavaコンパイラは文句を言い

警告:最後の

プライベート静的クラス:[rawtypes]生タイプを見つけましたクラス[] ARGUMENT_TYPE =新しいクラス[] {String.class};

SuppressWarningsを除いて、コンパイラには「シャットダウン、私はあなた自身の仕様で行う必要があります!

+0

なぜList >を使用しないのですか?配列とジェネリックスはうまく組み合わせません...ところで: 'Class 'にはどのような目的がありますか?どうしてクラス ' '? – Seelenvirtuose

+0

私は 'Class 'を持っていることを知っているので。 '?'を使うのは奇妙に思えます。 – Nikem

+0

サードパーティのライブラリは 'Class []'を期待しているので配列を使用します – Nikem

答えて

1

この静的配列をどのように使用する予定かわかりません。いくつかの追加的な文脈が良いでしょう。

これはいかがですか?

private static final Class<?>[] ARGUMENT_TYPE = new Class<?>[]{String.class, Int.class}; 
+0

これは意図した使用法とまったく同じように見えます。しかし、やはり '?'は私にとっては奇妙に見えます:(なぜEarthコンパイラで私はそれを書かなければならないのですか?) – Nikem

+0

申し訳ありませんが、サンプルコードですでに見てきたように、異なるクラスのClassオブジェクトを追加できるようになりました。 ( 'Class []')。 – Axel

+0

@Nikemコンパイラは、型を指定せずにジェネリックを使うつもりであることを単に確認していると思います。これは、警告ディレクティブを無視するための一種の略語です。ジェネリッククラスは、通常のクラスであるかのように、明示的にコンパイラに指示することなく、あなたが間違っていた赤いフラグです。この場合、未知のクラスオブジェクトの配列または配列を使用することが理にかなっていますクラスオブジェクトを1つしか持てないため、配列の目的が壊れてしまいます。しかし、コンパイラを非常にスマートにすることは非常に難しい作業です。 –

関連する問題