考虑
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>
我肯定知道,就上述情况我的理解是不正确的。请详细说明?
答案 0 :(得分:2)
原因是,在泛型中,关键字extends
用于不同的上下文。
在泛型中,T extends Something
表示T
将成为Something
或的子类将实施Something
(在{一个接口)。绑定的类型并不重要(类或接口) - 重要的是T
为提供的绑定的子类型。
更多信息: