4

Java 言語仕様 v7 の Java 文法では、コンストラクターに対して次の文法規則が指定されています

Primary:
    ...
    new Creator
    ...

Creator:  
    NonWildcardTypeArguments CreatedName ClassCreatorRest
    CreatedName ( ClassCreatorRest | ArrayCreatorRest )

CreatedName:   
    Identifier [TypeArgumentsOrDiamond] { . Identifier [TypeArgumentsOrDiamond] }

ClassCreatorRest: 
    Arguments [ClassBody]

ここで私を困惑させるのはCreatedNameルールです。というような表現で、

new Class1<Integer>.Class2<Integer>();

有効なコンストラクターになります。もちろんそうではありません。

Class1.Class2実際、識別子のチェーン (例: ) が複数の型パラメーター リスト (例: ) を持つケースは見つかりません<Integer>。そのような場合は存在しますか、それとも文法は意味をなしませんか?

参考までに、JLSのセクション 15.9に記載されている同等の文法規則は、同じ問題を示しています (これらの規則は、セクション 4.3TypeDeclで定義されている非終端記号を参照しています)。

4

2 に答える 2

1

文法は、有効な Java ソース コードのスーパー セットを記述しているだけです。私の知る限り、最後のものだけTypeArgumentsOrDiamondが存在するかもしれませんが、あなたが見ている(簡略化された)文法は、このコーナーケースを扱っていません.

于 2013-02-13T12:25:24.720 に答える