这是所讨论代码的简化版本,一个泛型类使用另一个具有泛型类型参数的类,并且需要将其中一个泛型类型传递给具有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方法而不会遇到此警告?

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

不起作用,因为您无法创建通用数组。

最佳答案

除了添加@SuppressWarnings("unchecked"),我不这么认为。

bug report具有更多信息,但归结为编译器不喜欢泛型类型的数组。

08-07 06:40