如何理解Java文档中类型参数语法的{}与[]表示符号?
Java类型参数语法规则详解
先把Java语言规范中的类型参数语法翻译成中文:
类型参数(TypeParameter): {类型参数修饰符(TypeParameterModifier)} 标识符(Identifier) [类型边界(TypeBound)] 类型参数修饰符(TypeParameterModifier): 注解(Annotation) 类型边界(TypeBound): extends 类型变量(TypeVariable) extends 类或接口类型(ClassOrInterfaceType) {额外边界(AdditionalBound)} 额外边界(AdditionalBound): & 接口类型(InterfaceType)
下面逐个解答你的疑问:
1. {}代表可选参数吗?
不,{}在Java语言规范的语法表示里,代表被包裹的元素可以重复出现0次或多次。比如{TypeParameterModifier},意思是可以给类型参数加0个、1个甚至多个注解,像@NonNull @SuppressWarnings T这种写法是符合规则的。
2. []代表什么?
[]代表被包裹的元素是可选的,最多出现1次——也就是这个部分可以存在,也可以完全省略。
3. 在<T, V extends Number>中,{}和[]对应的位置在哪里?
拆分这个类型参数段里的两个类型参数来看:
- 对于
T:{TypeParameterModifier}:对应T的前方位置,这里没有加任何注解,属于0次重复的情况,符合规则。Identifier:就是T本身,是类型变量的名称。[TypeBound]:对应T的后方位置,这里没有写extends 类型,属于可选部分省略的情况,符合规则。
- 对于
V extends Number:{TypeParameterModifier}:对应V的前方位置,同样没有注解,0次重复。Identifier:就是V。[TypeBound]:对应V后方的extends Number,属于可选部分出现1次的情况,完全符合TypeBound的规则(这里Number是类类型,属于ClassOrInterfaceType)。
内容的提问来源于stack exchange,提问作者Squared
相关产品推荐
相关产品推荐

