
@safevarargs 注意事项
@safevarargs 注解用于确保使用可变参数类型时不会出现数组类型安全问题。但是,虽然它可以防止某些类型的错误,但它并非万能的。
在您提供的示例中,使用 varargs 数组作为参数的方法是:
static t[] asarray(t... objs) { return objs;}
并尝试将其与以下方法一起使用:
static k[] picktwo(k k1, k k2, k k3) { return asarray(k1, k2);}
此代码会引发编译错误,因为 picktwo 方法返回的是一个 object[] 数组,而 asarray 方法期望的是一个 string[] 数组。
AI建筑知识问答
用人工智能ChatGPT帮你解答所有建筑问题
22 查看详情
这是因为 @safevarargs 注解并不提供类型安全。它只会阻止将原始类型数组分配给通用类型数组,而这里的问题是试图将通用类型数组分配给一个不同类型的通用类型数组。
要解决此问题,可以将 asarray 方法重写为返回 list,而不是 t[]:
@safevarargsstatic list aslist(t... objs) { return new arraylist(arrays.aslist(objs));}
现在,picktwo 方法可以返回一个 list 而不会引发错误:
static List pickTwo(K k1, K k2, K k3) { return asList(k1, k2);}
以上就是@SafeVarargs注解真的能解决所有可变参数类型安全问题吗?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/380755.html
微信扫一扫
支付宝扫一扫