【发布时间】:2014-10-24 09:59:36
【问题描述】:
我有一种 util 方法可以将一个类型的 varargs 转换为该类型的数组 - 它看起来像这样:
public K[] array(K... ks) {
return ks;
}
用例是这样的,当调用需要数组的方法时,您可以简单地执行 array(val1, val2, val3),而不是定义数组。
但是,IntelliJ 给了我堆污染警告。我在一定程度上理解这意味着什么,但我对具体细节没有太多经验 - 所以,我想知道我是否可以添加 @SafeVarargs 以及这种方法是否真的安全。
IntelliJ 说:
问题概要 参数化可能造成的堆污染 第 249 行的可变参数类型
问题解决 最终确定并注释为@SafeVarargs
K 与 V 一起被声明为类的类型参数。
【问题讨论】:
-
IMO 你不需要这种方法,用
Whatever[] whateverArray = { val1, val2, val3, ...}; -
你能给出堆污染警告的exact细节吗?类型参数
K声明在哪里? -
@Luiggi,是的,但它是一个实用程序。
K[] keys = { key1, key2, key3 }; object.method(keys);vsobject.method(array(key1, key2, key3));- 第二个更容易编写,尤其是当你经常这样做时。 -
不,不是。如果您需要即时创建这样的数组,请这样做:
foo.method(new Whatever[] { val1, val2, val3, ... });。不需要您的 utility 方法。 -
@LuiggiMendoza:写
foo(array(a, b, c))比写foo(new Whatever[]{a, b, c})更明显冗长/视觉上分散注意力。
标签: java