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 중국어 웹사이트의 기타 관련 기사를 참조하세요!