메소드 서명의 Java "매개 변수"?


112

C #에서 메서드에 불확실한 수의 매개 변수가 포함 params되도록 하려면 메서드 시그니처에서 최종 매개 변수를 a로 만들어 메서드 매개 변수가 배열처럼 보이지만 메서드를 사용하는 모든 사람이 해당 유형의 매개 변수를 최대한 많이 전달할 수 있도록 할 수 있습니다. 발신자가 원하는대로.

Java가 유사한 동작을 지원한다고 확신하지만 수행 방법을 찾을 수 없습니다.

답변:


194

Java에서는 varargs 라고 하며 구문은 일반 매개 변수처럼 보이지만 유형 뒤에 줄임표 ( "...")가 있습니다.

public void foo(Object... bar) {
    for (Object baz : bar) {
        System.out.println(baz.toString());
    }
}

vararg 매개 변수는 항상 메소드 서명 의 마지막 매개 변수 여야하며 해당 유형의 배열을받은 것처럼 액세스됩니다 (예 : Object[]이 경우).


3
감사합니다. 제가 다른 것을 찾는 동안이 사실을 스스로 발견했고, 질문에 직접 답하기 위해 여기에 왔습니다.
Omar Kooheji

11

이것은 Java에서 트릭을 수행합니다.

public void foo(String parameter, Object... arguments);

세 가지 포인트를 추가해야 ...하고, varagr매개 변수는 메소드의 서명의 마지막이어야합니다.


3

그것은 이전의 답변에 기록되면, 그것은됩니다 varargs및 선언 ellipsis( ... )

또한 값 유형 및 / 또는 참조 유형을 전달하거나 둘 다 전달할 수 있습니다 (google Autoboxing ). 또한 printArgsAlternate아래 의 메서드 와 함께 메서드 매개 변수를 배열로 사용할 수 있습니다 .

데모 코드

public class VarargsDemo {

    public static void main(String[] args) {
        printArgs(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
        printArgsAlternate(3, true, "Hello!", new Boolean(true), new Double(25.3), 'a', new Character('X'));
    }

    private static void printArgs(Object... arguments) {
        System.out.print("Arguments: ");
        for(Object o : arguments)
            System.out.print(o + " ");

        System.out.println();
    }

    private static void printArgsAlternate(Object... arguments) {
        System.out.print("Arguments: ");

        for(int i = 0; i < arguments.length; i++)
            System.out.print(arguments[i] + " ");

        System.out.println();
    }

}

산출

Arguments: 3 true Hello! true 25.3 a X 
Arguments: 3 true Hello! true 25.3 a X 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.