> Java > java지도 시간 > 가변 인수를 사용하여 배열을 Java 메소드에 인수로 전달할 수 있습니까?

가변 인수를 사용하여 배열을 Java 메소드에 인수로 전달할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-06 16:11:17
원래의
871명이 탐색했습니다.

Can I Pass an Array as Arguments to a Java Method with Variable Arguments?

Java에서 가변 인수가 있는 메소드에 배열을 인수로 전달할 수 있나요?

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!!!
로그인 후 복사
", "[ %s ]"); return String.format(format, args); } public static void main(String... args) { System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]" }

이 예에서 ezFormat 메소드는 가변 개수의 인수를 사용하여 형식화된 문자열을 반환합니다. String.format도 가변 배열 방식이므로 ezFormat에 전달된 각 인수는 String.format에 대한 개별 인수로 처리됩니다.

가변 배열 방식의 장점

Null 값 전달

변수 소수성 메서드에 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿