JAVA5 特性:可变参数

JAVA5 特性

可变参数

1. 使用目的

在 Java 中,类里面的方法如果不确定要传入某一个类型的参数的个数,可以使用可变参数传参。

	public static void main(String[] args) {
		printStr("1","2","3");
	}

	private static void printStr(String...strs){
		for (String str : strs) {
			System.err.println(str);
		}
	}

2.使用方法

  • Java支持传递同类型的可变参数给一个方法
  • 一个方法中只能指定一个可变参数
  • 可变参数必须是方法的最后一个参数。任何普通的参数必须在它之前声明
返回值类型 方法名称(类型...参数名称){ // 在方法声明中,在指定参数类型后加一个省略号(...) 
    // 方法体
}
private static void printStr(int a, String...strs){
    for (String str : strs) {
        System.out.println(str);
    }
}

调用含有可变参数的方法时:

  • 可以不写参数,即传入空参;
  • 可以直接在里边写入参数,参数间用逗号隔开;
  • 可以传入一个数组
public static void main(String[] args) {
    String[] strs = {"a","b","c"};
    printStr();
    printStr(strs);
    printStr("1","2","3");
}
  • 拥有可变参数的方法可以被重载,在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法。
  • 如果重载的两个方法中都出现了可变参数,并且在调用时会引起歧义,则报错。
private static void printStr(String...strs){
    for (String str : strs) {
        System.out.println(str);
    }
}

private static void printStr(Integer i, String...strs){
    for (String str : strs) {
        System.out.println(str);
    }
}
// 当 printStr("a","b","c"); 时,会与第一个printStr方法产生歧义
private static void printStr(String s, String...strs){
    for (String str : strs) {
        System.out.println(str);
    }
}
  • 可变参数可以兼容数组参数,但数组参数无法兼容可变参数。如果直接使用数组类型作为形参,那么在调用方法的传入的实参是需要固定长度的,而使用可变参数则没有这个问题
// printStr(array) 可以
private static void printStr(String...strs){
    for (String str : strs) {
        System.out.println(str);
    }
}
// 两个方法在调用时,会产生歧义
// printStr("a","b","c") 不可以
private static void printStr(String[] strs){
    for (String str : strs) {
        System.out.println(str);
    }
}

3.使用规范

  • 避免将带有可变参数的方法进行重载,即便可以这样做。

  • 尽量避免传递空值。

  • 重写含可变参数的方法时,参数不能变,要遵守重写的规范。

    1. 重写方法不能缩小访问权限;
    2. 参数列表必须与被重写方法相同(包括显示形式);
    3. 返回类型必须与被重写方法的相同或是其子类;
    4. 重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常。
    
原文地址:https://www.cnblogs.com/wzbury/p/13345282.html