Java中具有可比较接口的类型边界
在JDK 11中,我创建了一个名为“Collection”的泛型类,以便为type参数提供的任何类型都必须实现可比较的接口。类声明当前如下所示: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不喜欢这样 所以我的问题
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
- 镜像声明结构(使用单独的