태그 보관물: variadic-functions

variadic-functions

메소드 서명의 Java “매개 변수”? #에서 메서드에 불확실한 수의

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

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



답변

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

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

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


답변

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

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

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


답변

그것은 이전의 답변에 기록되면, 그것은됩니다 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 

답변