Sie müssen es als draw(new int[]{3,4,5})
{3,4,5} ist eine Array-Initialisierungsmethode, ohne die vorangestellte new int[]
macht es keinen Sinn. Sie können {3,4,5} als Parameter für eine Funktion namens int[]
anzeigen, die Ihnen ein neues Array zurückgibt.
Sehen Sie die anderen Ansers, warum Sie es nicht so machen können, wie Sie es versuchen.
Aber Sie könnten so etwas tun:
%Vor% Weil {3,4,5}
kein Array ist. (Wenn ja, was wäre ein Array von ?)
Arrays werden als Referenz übergeben. Passing-by-Reference bedeutet, dass, wenn ein Array als Argument übergeben wird, sein Speicheradressort tatsächlich übergeben wird, der als "Referenz" bezeichnet wird.
Ich würde gerne auf einige der anderen Antworten hier antworten. Es war eine Sprachdesign-Option, diese Syntax für die Array-Erstellung nicht zu unterstützen. Aber wahrscheinlich nicht, weil dieses Konstrukt immer mehrdeutig ist. Zu sagen, dass {3,4,5}
"mehrdeutig" ist oder "den Typ nicht widerspiegelt", ist eine zu starke Vereinfachung.
Es gibt das Potenzial für Mehrdeutigkeit mit Array-Initialisiererausdrücken als Kurzschreibweise für die Array-Erstellung, aber es kommt nicht von den einfachen Fällen wie {3,4,5}
. Sie könnten eine Regel definieren, um einen Typ für einen Array-Initialisierer wie {x,y,z}
auf die gleiche Weise eindeutig zu bestimmen, wie der Typ eines arithmetischen Ausdrucks wie x+y+z
unter Verwendung von Typ-Promotion-Regeln. Also wäre {3,4,5}
in diesem hypothetischen Fall in int[]
oder a short[]
? Es wäre ein int[]
, weil 3
, 4
und 5
Ints sind.
Selbst bei Objekten ohne Schnittstellen könnte man sagen, dass der Typ von {x,y,z,...}
die spezifischste gemeinsame Oberklasse ist, der alle Array-Element-Ausdrücke zugewiesen werden können. Der kleinste gemeinsame Nenner, wenn Sie so wollen.
Aber mit Interfaces haben Sie effektiv Mehrfachvererbung, also haben Sie vielleicht mehrere Supertypen, denen alle Elemente eines Arrays zuweisbar sind, aber keiner dieser Supertypen ist zuweisbar, so dass Sie eine echte Mehrdeutigkeit haben.
> Und der Null-Element-Fall, {}
, jetzt ist das mehrdeutig.
Die Sprachdesigner konnten eine Regel mit folgendem Wortlaut bereitstellen: "Ein Array-Initialisiererausdruck selbst wird wie ein new T[]{...}
für den Typ des Initialisierers behandelt". Selbst mit Schnittstellen hätten sie es bereitstellen und anheften können "... wenn der Typ eindeutig ist, sonst ist es ein Kompilierungsfehler". Aber sie taten es nicht. Vielleicht, weil sie die Zweideutigkeit nicht zulassen wollten. Vielleicht, weil die Regeln zur Typbestimmung für den Compiler oder für Entwickler zu kompliziert wären. Vielleicht, weil sie es nicht zu einfach machen wollten, eine Menge kleiner Arrays auf dem Haufen zu verteilen. Aber nicht weil {3,4,5}
grundsätzlich nicht interpretierbar ist.