java注解@SafeVarargs

自己写了一个工具方法

public class Maps {
	public static <K, V> HashMap<K, V> newHashMap(Entry<K, V>... entries) {
	    HashMap<K, V> map = new HashMap<>();
	    for (Entry<K, V> entry : entries) {
	        map.put(entry.getKey(), entry.getValue());
	    }
	    return map;
	}
}

在调用这个方法的时候,idea提示泛型参数丢失

List<Map<String, String>> list = new ArrayList<>();
list.add(Maps.newHashMap());

在idea里提示:
在这里插入图片描述
按照这个提示,应该是指Maps.newHashMap这个方法的返回结果丢失了泛型信息,可以我明明定义了呀,于是用Map来测试:

Map<String, String> map = Maps.newHashMap();

这个时候提示

在这里插入图片描述
这个提示应该是说不能创建未检测的泛型数组,比如像下面的这种做法是不允许的

public static <T> T[] newT() {
    return new T[2];
}

但是我看到guava里是有方法可以使用带泛型的varargs啊,像这样:

List<Integer> list = Lists.newArrayList(1, 2, 3);

于是查看了Lists.newArrayList的源码

@SafeVarargs
@GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList(E... elements) {
	checkNotNull(elements); // for GWT
	// Avoid integer overflow when a large array is passed in
	int capacity = computeArrayListCapacity(elements.length);
	ArrayList<E> list = new ArrayList<>(capacity);
	Collections.addAll(list, elements);
	return list;
}

原来是@SafeVarargs这个注解的作用,这个是参数安全类型注解。它的目的是提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值