>Java >java지도 시간 >가변 인수를 사용하는 Java 메소드는 배열을 다중 인수로 허용할 수 있습니까?

가변 인수를 사용하는 Java 메소드는 배열을 다중 인수로 허용할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-22 21:52:10667검색

Can Java Methods with Variable Arguments Accept an Array as Multiple Arguments?

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

다음과 같은 원하는 함수를 고려하세요.

class A {
  private String extraVar;
  public String myFormat(String format, Object ... args) {
    return String.format(format, extraVar, args);
  }
}

이 시나리오에서는 args가 myFormat 메서드 내에서 Object[]로 해석되어 결과적으로 String.format에 단일 인수가 제공됩니다. 그러나 목표는 args의 각 개체를 고유한 인수로 전달하는 것입니다.

가능한가요?

예, T...이므로 가능합니다. T[].

JLS(Java 언어 사양) 8.4.1의 단순한 구문 설탕입니다. 정의:

목록의 마지막 형식 매개변수는 특별합니다. 유형 뒤에 생략 부호로 표시되는 가변 계수 매개변수일 수 있습니다.

마지막 형식 매개변수가 T 유형의 가변 계수 매개변수인 경우 형식 매개변수를 정의하는 것으로 간주됩니다. T[] 유형.

변수 Arity를 ​​보여주는 예 매개변수:

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

메인 메소드에서 args는 ezFormat에 전달되는 String[]입니다. 이 메소드는 공분산으로 인해 이를 Object[]로 처리합니다.

Varargs Gotchas:

null 전달

    int[] myNumbers = { 1, 2, 3 };
    System.out.println(ezFormat(myNumbers));
    // prints "[ [I@13c5982 ]"

이 문제를 해결하려면 Object[] { null } 또는 (Object)를 호출하세요. null.

배열에 추가 인수 추가

기본 유형의 배열을 전달하려면 이를 참조 배열로 래핑하세요.

    Integer[] myNumbers = { 1, 2, 3 };
    System.out.println(ezFormat(myNumbers));
    // prints "[ 1 ][ 2 ][ 3 ]"

위 내용은 가변 인수를 사용하는 Java 메소드는 배열을 다중 인수로 허용할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.