gpt4 book ai didi

java - java语法中具有多个类型参数列表的构造函数

转载 作者:搜寻专家 更新时间:2023-11-01 03:08:21 24 4
gpt4 key购买 nike

java grammar来自 Java 语言规范 v7 的构造函数指定了以下语法规则:

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> )。这种情况是否存在,或者语法没有意义?

作为引用,section 15.9 中给出的等效语法规则的 JLS 表现出相同的问题(这些规则引用 TypeDecl 非终端,它在 section 4.3 中定义)。

最佳答案

这个规则看起来像是在一个规则中允许两者的技巧:

  • new Class1<...>();
  • new Class1.Class2<...>(); // Where Class2 is a static inner class

允许的表达式:new Class1<Integer>.Class2<Integer>();永远不会在 Java 中编译,因为:

The member type Class1.Class2 cannot be qualified with a parameterized type, since it is static. Remove arguments from qualifying type Class1

关于java - java语法中具有多个类型参数列表的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com