Java中具有可比较接口的类型边界

Java中具有可比较接口的类型边界,java,generics,inheritance,interface,Java,Generics,Inheritance,Interface,在JDK 11中,我创建了一个名为“Collection”的泛型类,以便为type参数提供的任何类型都必须实现可比较的接口。类声明当前如下所示: public class Collection <T extends Comparable<T>> 公共类集合 最初我认为类声明应该是这样的: public class Collection <T implements Comparable<T>> 公共类集合 但JDK不喜欢这样 所以我的问题

在JDK 11中,我创建了一个名为“Collection”的泛型类,以便为type参数提供的任何类型都必须实现可比较的接口。类声明当前如下所示:

public class Collection <T extends Comparable<T>> 
公共类集合
最初我认为类声明应该是这样的:

public class Collection <T implements Comparable<T>> 
公共类集合
但JDK不喜欢这样

所以我的问题是为什么类声明是前者而不是后者。我们不是扩展类并实现接口吗

  • 集合已在
    java.util
    中。用这个名字创建另一个类会让每个人都感到困惑;我建议你选别的

  • 泛型一般是关于类型的。使用了单词
    extends
    ,这与该关键字在例如
    类Foo extends Bar
    中的用法类似,但含义并不完全相同。关键是,规范说它是
    扩展的
    ,而不是
    实现的
    ,不管后面会发生什么,在这一点上,除了“规范这么说”没有什么意义

  • 集合已在
    java.util
    中。用这个名字创建另一个类会让每个人都感到困惑;我建议你选别的

  • 泛型一般是关于类型的。使用了单词
    extends
    ,这与该关键字在例如
    类Foo extends Bar
    中的用法类似,但含义并不完全相同。关键是,规范说它是
    扩展的
    ,而不是
    实现的
    ,不管后面会发生什么,在这一点上,除了“规范这么说”没有什么意义


  • 因此,如果
    E
    可能是一个类或接口,您是否希望
    实现E
    扩展E
    ?除非您需要第三个关键字(可能是上下文敏感的),否则区分是没有意义的。

    鉴于
    E
    可能是一个类或接口,因此您是否希望
    实现E
    扩展E
    ?除非您需要第三个关键字(可能是上下文敏感的),否则区分是没有意义的。

    关于边界声明的语法,在Java 5中添加泛型的语言架构师面临以下选择:

    • 镜像声明结构(使用单独的
      扩展
      实现
      边界),或

    • 为上界类型选择一种形式(例如,
      T extends Foo
      T)关于边界声明的语法,在Java 5中添加泛型的语言架构师面临以下选择:

      • 镜像声明结构(使用单独的
        扩展
        实现
        边界),或
      • 为上限类型选择一种形式(例如,
        T扩展Foo
        T