首页 新闻 赞助 找找看

阿里巴巴Java开发手册:相同参数类型,相同业务含义,才可以使用 Java 的可变参数

0
[已解决问题] 解决于 2019-09-27 17:40

【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object 。
说明:可变参数必须放置在参数列表的最后。 ( 提倡同学们尽量不用可变参数编程 )
正例: public List<User> listUsers(String type, Long... ids) {...}

 

为什么是相同的参数类型,相同的业务含义才可以使用java的可变参数

对于这句话不是很理解

renguanyu的主页 renguanyu | 小虾三级 | 园豆:836
提问于:2018-07-09 17:00
< >
分享
最佳答案
0

不懂阿里巴巴的开发手册,但我的理解:

一尽量少使用语义不明的Object、Map、JsonObject作为参数,举例:1.addUser(Object user) 2.addUser(Map user) 3.addUser(JsonObject user) 4.<T> addUser(T user) 5.addUser(User user) ,1-4明显语义不明,面对这样的代码时一脸懵逼,user里面到底有什么东西?5能够从User类里面很清楚的了解User的结构是什么。

二尽量少使用可变(不定)参数?No,反之我建议尽量使用可变(不定)参数替换数组,举例:数组参数addUsers(User[] users)和不定参数addUsers(User  ...users),不定参数除了可以传入数组外(与数组参数功能一样),还可以分开传入单个或多个参数

奖励园豆:5
TCG2008 | 小虾三级 |园豆:1150 | 2018-07-12 19:21
其他回答(1)
0

很多规范并不是说不能用,是用了之后会让人很疑惑
如果用的是Object的可变长参数,那么不能确定你传的这些哪个是User还是Map还是List,或者
相同业务含义,我的理解是,如果传入的是几个Product类型,这几个Product实际是子类实现的noodle或者是steel,不属于相同业务,应该分开重载方法,传入各子类型,这样更清晰

n490808114 | 园豆:215 (菜鸟二级) | 2019-09-25 11:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册