关键字通过Generic Java </t>中的类型参数<t>进行扩展

时间:2014-10-21 14:02:15

标签: java generics extends

考虑

Gen<T>

所以,当我写这样的东西时

Gen<Integer> someRef = new Gen<>();
Gen<String> someRef = new Gen<>();

根据我的理解,

  

Java编译器实际上并没有创建不同版本的Gen,       或任何其他通用类。虽然用这些术语来思考是有帮助的,       事实并非如此。相反,编译器删除所有泛型       类型信息,替换必要的强制转换,使我的代码行为       好像创建了特定版本的Gen。       因此,我的程序中实际上只存在一个Gen版本。       删除泛型类型信息的过程称为擦除。

现在考虑一下,

interface MinMax<T extends Comparable<T>> {
  

通常,通用接口的声明方式与a相同   泛类。       在这种情况下,type参数为T,其上限为Comparable,即a       java.lang定义的接口。实现Comparable的类定义对象       可以订购。因此,要求Comparable的上限确保MinMax       只能用于能够比较的对象。请注意       可比较也是通用的。 (它是由JDK 5对generics进行改造的。)       它需要一个指定对象类型的类型参数       被比较。

接下来,MinMax由MyClass实现。

注意MyClass的声明,如下所示:

class MyClass<T extends Comparable<T>> implements MinMax<T> {

这是我的困惑, 当我写这样的东西时,

MyClass<Integer>  ......

类型参数T将被Integer替换。或者说任何其他版本(取决于我将要操作的物体的类型)。

我非常清楚一个类实现了一个接口。关于上述内容,上述案例不会像这样工作,

class MyClass<Integer(or some other version) extends Comparable<Integer>> implements MinMax<Integer> {

那么,这里的一个类如何扩展一个接口,

Integer(or some other version) extends Comparable<Integer>

我肯定知道,就上述情况我的理解是不正确的。请详细说明?

1 个答案:

答案 0 :(得分:2)

原因是,在泛型中,关键字extends用于不同的上下文

在泛型中,T extends Something表示T将成为Something 的子类将实施Something(在{一个接口)。绑定的类型并不重要(类或接口) - 重要的是T为提供的绑定的子类型

更多信息: