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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

这是所讨论代码的简化版本,一个泛型类使用另一个具有泛型类型参数的类,需要将其中一个泛型类型传递给具有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"),有更多的信息,但归根结底是编译器不喜欢泛型类型数组。

用户回答回答于

TomHawtin在一条评论中指出了这一点,但更明确的是:是的可以在声明站点(而不是(可能有很多)调用站点):切换到JDK 7来解决这个问题。

扫码关注云+社区