2010-12-29 10 views
0

Jemand auf eine andere Antwort gepostet den Code:Wie unterscheidet sich das von der Definition eines Variablentyps?

List<ISpeak> animalsThatTalk = new ArrayList<ISpeak>(); 

Was die < nicht> tun?

aktualisieren

Ich weiß, dass mein zweites Beispiel nicht kompilieren würde ... Ich habe meine Frage wegen der Verwirrung umformuliert.

+3

Dieses zweite Beispiel kommt nicht einmal annähernd zum Kompilieren. – Falmarri

+1

Was? Ich verstehe nicht, was du mit den Klammern machen willst. –

+0

Huh? Ich bekomme die Syntax im zweiten Beispiel nicht. Bist du sicher, dass du nicht gemeint hast? Liste animalsThatTalk = new ArrayList (); '? – birryree

Antwort

0

spitze Klammern, d.h. <...>, werden für Typparameter verwendet. Sie müssen einen Typ angeben, z. Integer oder String. Runde runde Klammern werden für Wertparameter verwendet, und Sie müssen einen Wert angeben, z. 1 oder "Hallo Welt".

Beispiel:

new ArrayList<String>(3) 

Dies definiert eine neue Liste von Zeichenketten mit Anfangskapazität 3. String ist der Typ-Parameter. 3 ist ein Wertparameter.

0

Es ist nur die Syntax der Sprache ... die zweite ist einfach nicht in Java gültig, obwohl sie fast in einer Sprache wie D kompilieren würde. So haben sie es entschieden, es ist nicht wirklich richtig oder falsch. Sie haben sich dafür entschieden, die Typargumente in Carets zu schreiben, weil sie keine Variablen sind, also sind sie nicht wie normale Argumente.

+0

Almost Vb.net als auch! – asawyer

+0

Ja, das habe ich vergessen. :) – Mehrdad

1

Es scheint Ihre Frage ist auf die Verwendung von <> vs(). Bei Auflistungen müssen Sie in der Regel einen Parameter oder Typ für die Auflistung angeben. <> wird verwendet, um dies zu tun.

Also in Ihrem Beispiel eine Liste der Typ ISpeak ist

List<ISpeak> 

erstellt werden Sie auch eine Liste von ganzen Zahlen

List<Integer> 

Die < schaffen könnte> einfach können Sie die Art des definieren Objekt, das die Sammlung enthalten soll.

Das zweite Beispiel

List (Speak) animalsThatTalk 

nicht kompilieren. Der Compiler wird versuchen, die Funktion List mit einem Argument Speak aufzurufen.

+2

Der zweite wird auch nicht in Java kompilieren. Du bist ein C# -Programmierer? – BalusC

+0

In der Tat, für meine Java-Freunde behoben. –

+0

Also, wenn nur für dieses Beispiel 'List' ein Array ist, würde' List 'die Werte in diesem Array als ganze Zahlen definieren? – Webnet

Verwandte Themen