2017-10-05 3 views
2

편집 : 명확히하기 위해 파이썬 코드와 동일한 Java가 필요합니다.Java에서 함수의 인수를 내부 함수로 전달 하시겠습니까?

함수의 모든 인수를 함수에서 호출 된 다른 함수로 전달하려면 어떻게합니까? 이것은 다음과 같은 방법으로 파이썬에서 가능했다 :

def p(*args): 
    print(*args) 

는 여러 개의 인수가 Object... objects 사용하여 Java에 전달 될 수 있습니다하지만 "풀기"배열에 의해 내부 함수에 전달하는 방법을 모른다 알고있다. 달성하고자하는 것의 한 예 :

public static void printf(Objects object) { 
    System.out.printf(objects) 
    //I don't believe that this works, but it's the jist of what I want to do 
} 

이와 비슷한 방법이나 더 많은 Java와 유사한 방법이 있습니까?

+1

왜 당신이 작동하지 않습니다 생각하십니까 :

private static void foo(Object... objs) { bar(objs) } private static void bar(Object a, Object b, Object c, Object d, Object e) { } 

당신은 하나의 인수 하나를 통과해야? – Mritunjay

+0

당신은 객체를 생성하고 거기에 모든 변수를 저장할 수 있습니다. 그러나 당신의 경우에는 System.out.printf가 배열을 인수로 생각하지 않기 때문에'* args'가 더 좋습니다. – AndMar

+0

@Mritunjay라고 생각합니다. 'public static void printf (Object ... o) { System.out.printf (o); \t}'작동하지 않습니다 – sblack

답변

0

System.out.printf의 특정 경우에 대해 이것은 매우 가능합니다. printf에는 (String, Object...)의 인수 목록이 있기 때문입니다. 이 작업을 수행 할 수 있습니다

private static void foo(String s, Object... objs) { 
    System.out.printf(s, objs); 
} 

당신은 기본적으로 Object... 또는 Object[]을 필요로하는 다른 방법에 유형 Object...의 인수를 전달할 수 있습니다.

그러나 할 수없는 일은 Object...을 5 Object 초를 기다리는 방법으로 전달하는 것입니다.

bar(objs[0], objs[1], objs[2], objs[3], objs[4]); 
+0

당신은 이것이'System.out.printf'의 특별한 경우에 적용된다고 언급했습니다. 첫 번째 인수는 항상 문자열이어야합니까? 어떤 경우에 효과가 없을까요? – sblack

+0

인수 목록이 다른 경우, 내가 대답의 끝 부분에 표시된 것처럼 배열의 각 요소에 액세스해야합니다. 'objs '를 전달할 수는 없습니다. @sblack – Sweeper

-1

당신은 함께 모든 인수를 전달할 수 있습니다

def func1(*args): 
    print 'Hi, my name is func1' 
    print 'Now I will call func2 with all args' 
    func2(*args) 

아니면 일부 인수 전달하려면 :

def func1(*args): 
    print 'Hi, my name is func1' 
    print 'Now I will call func2 with only two args' 
    func2(args[1], args[5]) 
+0

저는 파이썬에 대한 도움을 원하지 않습니다. 파이썬 코드에 해당하는 자바가 필요하다. – sblack

0

당신은 사용할 수 있습니다 ...

public static void foo(Object... args) { 
for (Object arg : args) { 
    System.out.println(arg); // do something here 
} 
} 

전화 원하는 곳에서 이걸

foo("1", "2", "3" , 1 , 1.2 , 1231 , "hello"); // you can pass as many as you want

+0

하지만 내가 제공 한 예제 인 System.out.printf와 같은 것은 작동하지 않습니다. – sblack

관련 문제