Java语法糖之个数可变的形参的实现
1. 背景
从JDK1.5开始,Java支持个数可变的形参,类似:
public class ParamDemo { public static void main(String[] args) { String basketball = "篮球"; String football = "足球"; showSports(basketball, football); } /** * 使用个数可变形参的方法 */ public static void showSports(String... sports) { for (String sport : sports) { System.out.println(sport); } } }
2. 优点
其实个数可变形参的本质就是一位数组,但是如果上面的例子采用一位数组的话,写起来要更加麻烦点。
public class ParamDemo { public static void main(String[] args) { String basketball = "篮球"; String football = "足球"; showSports(basketball, football); showSportsByArray(new String[] { basketball, football }); } /** * 使用个数可变形参的方法 */ public static void showSports(String... sports) { for (String sport : sports) { System.out.println(sport); } } /** * 使用1维数组作为形参 */ public static void showSportsByArray(String[] sports) { for (String sport : sports) { System.out.println(sport); } } }
3. 注意事项
3.1 位置只能在方法的最后
由于个数可变的形参数量不确定,所以只能放到形参列表的最后。而数组形式的参数是可以放到形参列表任意位置的。
3.2 个数可变形参本质是数组,所以不能算重载
看下面的例子:
public class ParamDemo { public static void main(String[] args) { String basketball = "篮球"; String football = "足球"; showSports(basketball, football); showSportsByArray(new String[] { basketball, football }); } /** * 使用个数可变形参的方法 */ public static void showSports(String... sports) { for (String sport : sports) { System.out.println(sport); } } /** * 使用1维数组作为形参 */ public static void showSports(String[] sports) { for (String sport : sports) { System.out.println(sport); } } }
编译就报错了,如下,说明啥?String...这样的形参其实还是编译为String[]运作的,所以不算重载。
Duplicate method showSports(String[]) in type ParamDemo ParamDemo.java
示例
/** * 可变个数形参的方法: * javaSE 5.0 中提供了 Varargs(variable number of arguments)机制, * 允许直接定义能和多个实参相匹配的形参,从而,可以用一种更简单的方式, * 来传递个数可变的形参. * * 2.具体使用: * 2.1 可变个数形参的格式: 数据类型...变量名 * 2.2 当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个,。。。 * 2.3 可变个数形参的方法与本类中,形参不同的方法之间构成重载 * 2.4 可变个数形参的方法与本类中的方法名相同,形参类型也相同的数组之间不过程重载。换句话说,二者不能共存。 * 2.5 可变方法个数形参在方法的形参中,必须声明在末尾。 * 2.6 可变个数形参在方法的形参中,最多只能声明一个可变形参。 */ //JDK 5.0之前:采用数组形参来定义方法,传入多个同一类型变量 //public static void test(int a,String[] books); //JDK 5.0:采用可变个数形参来定义方法,传入多个同一类型变量 //public static void test(int a,String...books); public class MethodArgsTest { public static void main(String[] args){ MethodArgsTest test = new MethodArgsTest(); test.show(12); test.show("hello"); test.show("hello","world","AA","BB"); // test.show(String[]{"AA","BB","CC"}) } public void show(int i){ } public void show(String s){ System.out.println("show(String)"); } public void show(String...strs){ System.out.println("show(String ... strs)"); for (int i=0; i<strs.length;i++) { System.out.println(strs[i]); } } // public void show(String[] strs){ // } //2.5 public void show(int i,String...strs){ } }
到此这篇关于Java语法糖之个数可变的形参的实现的文章就介绍到这了,更多相关Java 个数可变的形参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Spring Security OAuth 个性化token的使用
这篇文章主要介绍了Spring Security OAuth 个性化token的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-02-02线程池ThreadPoolExecutor使用简介与方法实例
今天小编就为大家分享一篇关于线程池ThreadPoolExecutor使用简介与方法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03springboot aop切到service层,不生效问题
这篇文章主要介绍了springboot aop切到service层,不生效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-05-05java实现fibonacci数列学习示例分享(斐波那契数列)
这篇文章主要介绍了fibonacci数列(斐波那契数列)示例,大家参考使用吧2014-01-01java基于正则提取字符串中的数字功能【如提取短信中的验证码】
这篇文章主要介绍了java基于正则提取字符串中的数字功能,可用于提取短信中的验证码,涉及java基于正则的字符串匹配相关操作技巧,需要的朋友可以参考下2017-01-01SpringBoot中的Condition包下常用条件依赖注解案例介绍
这篇文章主要介绍了SpringBoot中的Condition包下常用条件依赖注解案例,文章基于Java的相关资料展开主题详细内容,需要的小伙伴可以参考一下2022-04-04SpringBoot整合RedisTemplate实现缓存信息监控的步骤
这篇文章主要介绍了SpringBoot整合RedisTemplate实现缓存信息监控,一步一步的实现 Springboot 整合 Redis 来存储数据,读取数据,需要的朋友可以参考下2022-01-01
最新评论