1. ホーム
  2. java

[解決済み] コンパイラの警告「A generic array of T is created for a varargs parameter」を解決することは可能ですか?

2022-04-27 02:24:54

質問

これは問題のコードの簡略版です。あるジェネリッククラスはジェネリック型のパラメータを持つ別のクラスを使用し、ジェネリック型の1つをvarargsパラメータを持つメソッドに渡す必要があるのです。

class Assembler<X, Y> {
    void assemble(X container, Y... args) { ... }
}

class Component<T> {
    void useAssembler(T something) {

        Assembler<String, T> assembler = new Assembler<String, T>();

        //generates warning:
        // Type safety : A generic array of T is
        // created for a varargs parameter
        assembler.assemble("hello", something);
    }

}

この警告を出さずに、varargsメソッドにgenericパラメータを渡す正しい方法はありますか?

勿論、以下のようなものです。

assembler.assemble("hello", new T[] { something });

は、一般的な配列を作成できないため、動作しません。

解決方法は?

Java6では @SuppressWarnings("unchecked") は、ないと思います。

この バグレポート にはより多くの情報がありますが、要するにコンパイラは汎用型の配列を好まないということです。