2011-05-21 22 views
19

在PHP中,你可以做到以下幾點:初始化數組中的方法參數

method(array("a", "b")); 

你能在Java中初始化字符串數組作爲方法調用的參數,像tihs:

method(new String[] = {"a", "b"}); 

謝謝!

回答

47

Java有一個等價的結構:

import java.util.Arrays; 

public class Foo { 
    public void method(String[] myStrArray) { 
     System.out.println(Arrays.toString(myStrArray)); 
    } 

    public static void main(String[] args) { 
     Foo foo = new Foo(); 
     foo.method(new String[]{"hello", "goodbye"}); // **array created inline** 
    } 
} 
+0

是的,這正是我想達到的。謝謝! – aksamit 2011-05-21 12:33:27

+0

@aksamit:不客氣! – 2011-05-21 12:48:47

+0

+1。查看我的答案,瞭解如何擺脫多餘的類型註釋。 – missingfaktor 2011-05-21 18:51:15

1

沒有

但我們有匿名類。

foo(new Runnable(){public void run(){}}); 
+0

你肯定可以在Java中創建數組內聯(這表現在@氣墊船和我自己的答案)。關於匿名課堂,這與問題甚至有什麼關係? – missingfaktor 2011-05-22 05:55:56

+0

@拒絕OP要的是默認參數。不是在方法調用中的參數 – 2011-05-22 07:44:17

+1

@Jigar:我不這麼認爲。在@ Hovercraft的答案下看到他的評論。他似乎誤解了這個問題。我會解決這個問題。 – missingfaktor 2011-05-22 07:51:44

4

Java有可變參數的方法:

public void foo(String ... args){ 
    for(String arg : args){ 
     // do something 
    } 
} 

可以調用具有0至n個參數這樣的方法,編譯器從所述參數創建一個數組,例如該方法相當於此簽名:

public void foo(String[] args) 
+0

謝謝,非常整齊。 – aksamit 2011-05-21 12:32:13

5

@氣墊船的回答顯示瞭如何創建Java中的數組內聯。

您可以通過使用實用方法(利用Java的受限類型推斷)來擺脫冗餘數組類型註釋,從而進一步改進該解決方案。

代碼:

import java.util.Arrays; 

// Utility class 
class Array { 
    public static <A> A[] of(A ... elements) { 
    return elements; 
    } 
} 

// Main class 
class Main { 
    public static void method(String[] s) { 
    System.out.println(Arrays.toString(s)); 
    } 

    public static void main(String[] args) { 
    method(Array.of("a", "b", "c")); 
    } 
} 
+2

我從來沒有見過這個。感謝您的教育! – 2011-05-21 18:53:09

+0

@Hovercraft:不客氣。 :-) – missingfaktor 2011-05-22 05:59:02