的java grammar從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的section 15.9中給出的等價語法規則表現出同樣的問題(這些規則引用TypeDecl
非終端,在section 4.3中定義)。
爲什麼不將規則表達爲限定符(Class1.Class2),然後是可選的類型參數列表呢?這似乎是顯而易見的事情。 – Norswap 2013-02-13 21:56:01
這個怎麼樣:'標識符[TypeArgumentsOrDiamond] | Identifier.Identifier [TypeArgumentsOrDiamond]'? – 2013-02-14 08:37:34
我真的不明白你的答案:我問過爲什麼Java像它這樣做,而不是像'Identifier(.Identifier)* TypeArgumentsOrDiamond?'。 – Norswap 2013-02-27 08:52:24