Java中泛型类的继承

Java新手,请教个关于泛型类的问题。
在Java中继承一个泛型类的时候,经常见到强制指定泛型类到底是什么,像是:

class GenericSuperClass<T>
{
    //先定义一个泛型类;
    
    T t;
    public GenericSuperClass(T t)
    {
        this.t = t;
    }
}

class GenericSubClass extends GenericSuperClass<Number>
{
    //继承之前定义的GenericSuperClass并且要求T是Number
}

类似的操作很常见,可是我找来找去就是没找到关于这种写法的讨论或者文档。 这种写法貌似也不符合对有界类型参数的声明。。。所以说这种写法是哪来的呢?

阅读 7.6k
1 个回答

当然来自Java语言规范:

8.1.4. Superclasses and Subclasses

Super:
    extends ClassType

ClassType:
    TypeDeclSpecifier TypeArgumentsopt

其中的TypeDeclSpecifier是指父类型,见4.3章节:

TypeDeclSpecifier:
    TypeName  
    ClassOrInterfaceType . Identifier

TypeName:
    Identifier
    TypeName . Identifier

关键是后面的可选的TypeArguments,见4.5.1章节:

TypeArguments:
    < TypeArgumentList >

TypeArgumentList: 
    TypeArgument
    TypeArgumentList , TypeArgument

TypeArgument:
    ReferenceType
    Wildcard

倒数第二个ReferenceType包括类、接口、数组等,当然Number也是合法的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题