Java文法糖--個数可変の形参

10418 ワード

1.背景
JDK 1.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.メリット
実は個数変形可能パラメータの本質は1つの配列ですが、上記の例で1つの配列を採用すると、書くのがもっと面倒になります.
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