@SafeVarargs是否是此方法的适当注释?
我有一些Java代码(使用Guava类):ImmutableList
@Nonnull
public static <E extends Event> UserHistory<E> forUser(long id, E... events) {
List<E> list = ImmutableList.copyOf(events);
return new BasicUserHistory<E>(id, list);
}
我得到了通常的堆污染警告,这些警告是用这样的方法带来的。由于我的方法没有对 进行任何修改,因此它不能引入堆污染。但是,如果(由于擦除)此方法的客户端使用错误的数组调用它,则它似乎可以通过自身传播堆 polution。events
events
如果我用 注释它,我仍然会得到一个警告(可用)但是阅读有关堆污染的Java文档,我有点不清楚这种方法的正确注释集。@SafeVarargs
@SuppressWarnings("varargs")
我还注意到没有标记为(尽管这可能只是一个兼容性问题),但确实如此。ImmutableList.copyOf
@SafeVarargs
Arrays.asList
那么,我的问题是:此方法的注释是否合适,因为它不会遇到 ,但可能会将检查不当的数组传播到最终的参数化类型,并允许在客户端代码中使用?@SafeVarargs
ClassCastException
ClastCastException
我相信,基于这个答案,它是安全的,因为代码不做任何取决于自身类型的事情,只取决于其元素的类型。这是对指导的正确应用吗?events