"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 변수 인수가있는 Java 메소드에 어레이를 인수로 전달할 수 있습니까?

변수 인수가있는 Java 메소드에 어레이를 인수로 전달할 수 있습니까?

2025-03-25에 게시되었습니다
검색:533

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

Java의 변수 인수가있는 메소드에 대한 인수로 배열을 전달할 수 있습니까? 배열을 가변 아티리티 방법으로 전달하면 배열 요소는 해당 방법에 대한 개별 인수로 취급됩니다.

다음 코드를 고려하십시오. 클래스 a { 개인 문자열 Extravar; public String myformat (문자열 형식, 개체 ... args) { return string.format (형식, 엑스트라, args); } }

이 예에서 myFormat 메소드는 변수 수의 인수 (... args로 표시)를 취하고 string.format 메소드를 사용하여 문자열을 형식화합니다. 문제는 Args가 개별 인수가 아닌 단일 객체 [] 배열로 취급된다는 것입니다. 이를 해결하기 위해 t ...가 t []. 이를 설명하십시오. 다음 코드 스 니펫은 변수 아티리티 메소드에 인수로 배열을 전달하는 방법을 보여줍니다. 문자열 형식 = new String (new char [args.length]). 교체 ( "\ 0", "[ %s]"); return string.format (형식, args); } public static void main (String ... args) { System.out.println (ezformat ( "a", "b", "c"); // 인쇄 "[a] [b] [c]" }

class A {
  private String extraVar;

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

변수 Arity Method Gotchas

public static String ezFormat(Object... args) {
    String format = new String(new char[args.length]).replace("\0", "[ %s ]");
    return String.format(format, args);
}

public static void main(String... args) {
    System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]"
}

가 변수 arity 메소드를 전달합니다. 예 :

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!!!

... NullPointerException이 발생합니다. 이를 피하기 위해 널 인수를 별도의 배열 또는 객체로 전달할 수 있습니다.

count(new Object[] { null }); // prints "1"
count((Object) null); // prints "1"

추가 인수 추가

가변 아티리티 메소드에 전달되는 배열에 추가 인수를 추가하기 위해 추가 인수를 추가하기 위해 Append () 및 prepend ()와 같은 헬퍼 메소드를 사용하여 배열을 수정할 수 있습니다 :

public static String ezFormat(Object... args) {
    String format = new String(new char[args.length]).replace("\0", "[ %s ]");
    return String.format(format, args);
}

public static void main(String... args) {
    System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]"
}
[] append (t []) 최종 int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); arr [n] = 마지막 명소; 반환 ARR; } static t [] prepend (t [] arr, t firstelement) { 최종 int n = arr.length; arr = java.util.arrays.copyof (arr, n 1); System.ArrayCopy (ARR, 0, ARR, 1, N); ARR [0] = 첫 번째 요소; 반환 ARR; }

프리미티브의 배열을 전달하는

변수 아티리티 메소드는 참조 유형에서만 작동합니다. 자가 옥싱은 프리미티브의 배열에는 적용되지 않습니다. 프리미티브 배열을 전달하려면 먼저 래퍼 유형의 배열로 변환해야합니다.
public static String ezFormat(Object... args) {
    String format = new String(new char[args.length]).replace("\0", "[ %s ]");
    return String.format(format, args);
}

public static void main(String... args) {
    System.out.println(ezFormat("A", "B", "C")); // prints "[ A ][ B ][ C ]"
}
int [] myNumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // 인쇄 "[[I@13C5982]" 정수 [] myNumbers = {1, 2, 3}; System.out.println (ezformat (mynumbers)); // 인쇄 "[1] [2] [3]"

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3