2015-11-16 17 views
5

Ich habe eine Frage bezüglich der JLS 3. Edition und der Inferenz-Mechanismus. Es wird in dem Abschnitt angegeben 15.12.2.7 dass:Java-Inferenz: Typ Variable mit einer oberen Grenze, die ein Array-Typ ist

Wenn F = U [], wobei der Typ U Tj geht, dann, wenn A ein Array-Typ V [], oder eine Variable des Typs mit einem oberen Schranke das ist ein Array-Typ V []

I versucht, eine Variable des Typs mit einem Array-Typ oberer Grenze, zu erzeugen, aber dies scheint nicht durch die Compiler in Kauf genommen werden. Etwas wie:

Meine Frage ist: ist die JLS falsch in diesem Fragment, oder habe ich etwas verpasst? Der letzte Teil des Satzes scheint unerfüllbar für mich.

Dank

+0

Wenn etwas falsch ist, wäre es der Compiler, nicht die JLS. – resueman

+0

3. Ausgabe? Bitte geben Sie einen Link zu diesem Angebot an. –

+0

Die JLS ist zumindest widersprüchlich, wie in Abschnitt 4.4, dass angegeben wird: Typ Variablen haben eine optionale gebunden, T & I 1 ... I n. Die Grenze besteht entweder aus einer Typvariablen oder einer Klasse oder einem Schnittstellentyp. T –

Antwort

2

Aus den Angaben in der folgenden Fehler:

https://bugs.openjdk.java.net/browse/JDK-6557960

Die JLS ist ein bisschen unzusammenhängend, wie es in Abschnitt heißt 4.4:

Typ Variablen ein optional gebunden, T & I 1 ... I n. Die gebundenen besteht entweder aus einem Typ Variable oder eine Klasse oder Schnittstelle Typ T

Der Typ Variable keine gebunden, ist ein Array-Typ haben kann, die widersprüchlich ist mit dem Teil in meiner Frage oben erwähnt (aus dem Abschnitt 15.12.2.7):

oder eine Variable des Typs mit einer oberen Grenze, die ein Array-Typ V []

Dieser Teil kann einfach ignoriert werden, da es nie erfüllbar sein.

Vielen Dank biziclop für den Link

+0

Der Verweis auf die oberen Grenzen des Array-Typs wurde auch aus der letzten JLS entfernt, wenn ich mich nicht irre. – biziclop