Java에서는 가변 인자 메소드(변수가 있는 메소드) 인수) 생략 부호(...)를 사용하여 메서드가 가변 개수의 인수를 허용함을 나타냅니다. 가변 arity 메서드에 배열을 전달하면 배열 요소가 해당 메서드에 대한 개별 인수로 처리됩니다.
다음 코드를 고려하세요.
class A { private String extraVar; public String myFormat(String format, Object... args) { return String.format(format, extraVar, args); } }
이 예에서 myFormat 메서드는 가변 개수의 인수(... args로 표시됨)를 취하고 String.format 메서드를 사용하여 문자열 형식을 지정합니다. 문제는 args가 개별 인수가 아닌 단일 Object[] 배열로 처리된다는 것입니다. 이 문제를 해결하려면 T...가 T[]의 구문적 설탕이라는 사실을 활용할 수 있습니다.
Java 언어 사양 8.4.1에서는 다음과 같이 설명합니다.
"마지막 형식 매개변수가 가 T 유형의 가변 계수 매개변수인 경우 T[] 유형의 형식 매개변수를 정의하는 것이 고려됩니다. 그러면 이 메소드는 가변 계수 메소드입니다."
이를 설명하기 위해, 다음 코드 조각은 가변 개수 메소드에 배열을 인수로 전달하는 방법을 보여줍니다.
public static String ezFormat(Object... args) { String format = new String(new char[args.length]).replace("<pre class="brush:php;toolbar:false">static void count(Object... objs) { System.out.println(objs.length); } count(null, null, null); // prints "3" count(null, null); // prints "2" count(null); // throws java.lang.NullPointerException!!!
이 예에서 ezFormat 메소드는 가변 개수의 인수를 사용하여 형식화된 문자열을 반환합니다. String.format도 가변 배열 방식이므로 ezFormat에 전달된 각 인수는 String.format에 대한 개별 인수로 처리됩니다.
변수 소수성 메서드에 null 값을 전달할 때 다음의 마지막 문에 유의해야 합니다. 예:
count(new Object[] { null }); // prints "1" count((Object) null); // prints "1"
...NullPointerException이 발생합니다. 이를 방지하려면 다음과 같이 null 인수를 별도의 배열이나 객체로 전달할 수 있습니다.
static <T> T[] append(T[] arr, T lastElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N+1); arr[N] = lastElement; return arr; } static <T> T[] prepend(T[] arr, T firstElement) { final int N = arr.length; arr = java.util.Arrays.copyOf(arr, N+1); System.arraycopy(arr, 0, arr, 1, N); arr[0] = firstElement; return arr; }
전달된 배열에 추가 인수를 추가하려면 가변 개수 메서드에 대해서는 추가() 및 prepend()와 같은 도우미 메서드를 사용하여 배열을 수정할 수 있습니다.
int[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ [I@13c5982 ]" Integer[] myNumbers = { 1, 2, 3 }; System.out.println(ezFormat(myNumbers)); // prints "[ 1 ][ 2 ][ 3 ]"
가변 배열 방법은 참조 유형에서만 작동합니다. 오토박싱은 프리미티브 배열에는 적용되지 않습니다. 프리미티브 배열을 전달하려면 먼저 이를 래퍼 유형의 배열로 변환해야 합니다.
위 내용은 가변 인수를 사용하여 배열을 Java 메소드에 인수로 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!