-
坑爹的 Java 可变参数,把我整得够惨。。
最近在写一个功能点,用了 Java 中的可变参数,真是把我搞得够惨。。
什么是可变参数?
就是方法参数用 Object... args
三个点形式,一个参数可以接收多个参数。
实际的代码就不帖了,来看这个示例吧:
示例1
public static void main(String[] args) {
test("name=%s&memo=%s", "Java技术栈", "666");
}
private static void test(String text, Object... params) {
String result = String.format(text, params);
System.out.println(result);
}
大家猜结果是什么?结果如我们想象:
name=Java技术栈&memo=666
示例2
public static void main(String[] args) {
test("name=%s&memo=%s", "Java技术栈");
}
private static void test(String text, Object... params) {
String result = String.format(text, params, "666");
System.out.println(result);
}
我把 "666" 移到了子方法里面,放到了 format 最后,再来看下结果是什么。
name=[Ljava.lang.Object;@4cb2c100&memo=666
这并非是我想要的结果,把可变参数 params 数组对象地址作为值输出出来了,把我搞得够惨,最后我干掉了可变参数。。
JDK里面很多有用到可变参数的,可实际开发中,并不建议使用可变参考,它带来的困扰和潜在的问题会远大于便利性,比如在方法重构、重写等也会带来很多问题。
关于可变参数,也是有开发规范的,不能随便写。我找到了阿里巴巴的《Java开发手册》中关于可变参数的规约。
相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object 。
说明:可变参数必须放置在参数列表的最后。 ( 提倡同学们尽量不用可变参数编程 )
正例: public List
listUsers(String type, Long... ids) {...}
获取这份阿里巴巴的Java开发手册最新PDF版,大家可以关注Java技术栈微信公众号,在后台回复:手册,即可获取。
阿里巴巴也是不建议大家合作可变参数的,可知它带来的坑会有多坑。。
来源:https://www.cnblogs.com/javastack/p/10996620.html
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比