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	
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章