2010-12-14 4 views
13

Wie kommt es, dass der erste Aufruf von someMethod nicht kompiliert wird, ohne dass explizit angegeben wird, dass es String [] ist?Java-Array-Initialisierung innerhalb der Argumentliste

Es ist in Ordnung, einen Array-Initialisierer zu verwenden, um ein Array String [] zu erstellen, aber Sie können damit kein Argument übergeben. Werden die geschweiften Klammern auf andere Weise für die Übergabe von Argumenten verwendet, die entgleisen, wie ich das erwarten würde?

public void someMethod(String[] arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 

    String[] arr = {"cat", "fish", "cow"}; 

    //Does not compile! 
    someMethod({"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(new String[]{"cat", "fish", "cow"}); 

    //This compiles! 
    someMethod(arr); 
} 

Der Compiler-Fehler ist folgende:

Verfahren irgendeinemethode (String []) in der Art Moo nicht anwendbar für die Argumente ist (String, String, String)

+1

Es ist nur zur Deklarationszeit erlaubt. Es ist eine Syntax-Sache –

Antwort

12

können Sie nur Verwenden Sie die { "hello", "world" } Initialisierungsnotation, wenn Sie eine Arrayvariable deklarieren oder einen Array-Erstellungsausdruck wie new String[] { ... }.

Siehe Section 10.6 Array Initializers in der Java Language Specification:

Ein Array Initialisierer in einer Erklärung angegeben werden kann oder als Teil eines Arrays Schaffung Ausdruck (§15.10), eine Anordnung zu schaffen und Bereitstellen einige Anfangswerte

5

Wenn Sie nicht möchten, dass explizite String[], Gebrauch verwenden:

public void someMethod(String... arr){ 
    //do some magic 
} 
… 
someMethod("cm", "applicant", "lead"); 

Die drei Punkte nach dem letzten Parameter geben an, dass das letzte Argument als Array oder als Argumentfolge übergeben werden kann.

Read more.

+3

Das wird nur funktionieren, wenn er die Signatur in 'String ... args' ändert. – aioobe

+0

@aioobe Danke. Ich habe meine Antwort aktualisiert. – 0x2D9A3

+0

Perfekt, das gibt mir genau das, wonach ich gesucht habe. Vielen Dank! –

1

Oder Sie können varargs verwenden:

public void someMethod(String... arr){ 
    //do some magic 
} 

public void makeSomeMagic(){ 
    someMethod("cat", "fish", "cow"); 
} 

Es ist im Grunde eine Phantasie-Syntax für ein Array-Parameter (Vararg muss der letzte Parameter in Methodensignatur sein).

0

Sie können die geschweiften Klammern verwenden, um ein Array zu initialisieren. In jedem anderen Fall wird es verwendet, um Blöcke von Statements zu definieren.

Verwandte Themen