この問題のコードの簡略化されたバージョンは、1つの汎用クラスはジェネリック型パラメータを持つ別のクラスを使用し、可変引数パラメータでメソッドをジェネリック型のいずれかを通過する必要がある:"varargsパラメータ用に作成されたTの一般的な配列"コンパイラ警告を解決することは可能ですか?
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);
}
}
この警告に遭遇することなく、genericパラメータをvarargsメソッドに渡す正しい方法はありますか?あなたは一般的な配列を作成することはできませんので、
assembler.assemble("hello", new T[] { something });
よう
もちろん何かが動作しません。
奇妙なもの。コンパイラがここで完全な型の安全性を保証できるように思われる。 – erickson
私の考えはちょうど –
Angelika LangerのJavaジェネリックスFAQの関連エントリー:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#Why%20does%20the%20compiler%20sometimes%20issue%20an%20unchecked%20warning% 20when%20I%20invoke%20a – Flow