是否有可能解决“为 varargs 参数创建 T 的泛型数组”编译器警告?

2022-08-31 07:20:39

这是所讨论代码的简化版本,一个泛型类使用另一个具有泛型类型参数的类,并且需要将其中一个泛型类型传递给具有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 });

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


答案 1

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

这个错误报告有更多信息,但它归结为编译器不喜欢泛型类型的数组。


答案 2

在 Java 7 中,用@SafeVarargs对方法声明进行注释


推荐