这是有问题的代码的简化版本,一个泛型类使用具有泛型类型参数的另一个类,并且需要将一个泛型类型传递给具有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);
}
Run Code Online (Sandbox Code Playgroud)
}
有没有正确的方法将泛型参数传递给varargs方法而不会遇到此警告?
当然有点像
assembler.assemble("hello", new T[] { something });
Run Code Online (Sandbox Code Playgroud)
由于无法创建通用数组,因此无效.
在Java 7中,您可以选择放置@SafeVarargs注释以抑制在使用不可重新生成的varargs参数编译方法时获得的警告.Project Coin的提议规定,当方法确保只有与varargs参数相同类型的元素存储在varargs数组中时,才应使用注释.
什么是非安全方法的例子?