2017-10-05 148 views
2

編輯:澄清,我想java代碼的相當於。將參數從函數傳遞給Java中的內部函數?

如何將函數中的所有參數傳遞給在其中調用的另一個函數。這在Python是可能以下列方式:

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

我知道多個參數可以在Java中使用Object... objects 傳遞,但我不知道如何通過「拆包」的陣列將它們傳遞到內部功能。我試圖完成的一個例子:

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

你覺得爲什麼它不工作? – Mritunjay

+0

您可以創建對象並將所有變量存儲在那裏,但我認爲在您的情況下使用'* args'更好 – AndMar

+0

@Mritunjay,因爲System.out.printf不會將數組作爲參數。 '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 s的方法。

private static void foo(Object... objs) { 
    bar(objs) 
} 

private static void bar(Object a, Object b, Object c, Object d, Object e) { 

} 

你必須傳遞參數逐一:

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

您提到這適用於'System.out.printf'的特定情況。第一個參數不是總是需要一個字符串嗎?什麼情況下不起作用? – sblack

+0

如果參數列表是別的東西,就像我在答案結尾處顯示的那樣,您需要訪問數組的每個元素。你不能只傳遞'objs'。 @sblack – Sweeper

-1

您可以通過所有ARGS一起:

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

或者,如果你只是想通過一些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

我不想幫助python。我想要python代碼的java等價物。 – 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