Java语法糖之个数可变的形参的实现

所属分类: 软件编程 / java 阅读数: 48
收藏 0 赞 0 分享

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 个数可变的形参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多