繁体   English   中英

Java泛型说明(使用Comparable时,将T约束为一个类型)

[英]Java Generics Clarification( Constraining T to a type, while using Comparable)

如果我要创建一个类,并且该类仅接受特定类型的数据。 我将继续使用泛型,并且在该类中,我将把类型限制为Number类的上限。

因此,此类只能使用Number类的类型或Number的子类(Integer,Double,Long等)。

现在说我有一个这些类型的数组,我希望比较该数组中的值。 因此,此类仅包含这些允许的数据类型的数组,并且我们仅希望比较这些类型。

我们可以使用包含compareTo方法的可比较接口来做到这一点。 您只能将compareTo方法与实现Comparable接口的类一起使用。 Number是实现此接口的类之一。

因此,如果我有一个指定以下内容的类头:

public class SomeName<T extends Number> {

这成功暗示了类型T的约束,使其仅接受Number类型或number的子类。 如果我想使用Comparable接口中的compareTo方法,则Numbers类要实现,而T则要约束到该方法。

如果我要使用诸如

public T someName(T[] SomeVariable) {

为什么该方法不能使用compareTo方法?T被限制在实现Comparable的Number类上。

如果我有

 public <T extends Comparable<T>> someName(T[] SomeVariable) {

然后它就起作用了,因为T扩展了可比性,这与T所实现的可比性在通用表示法中是可比的...难道实际上不是与上述相同吗?

Number 实现Comparable

使用的是:

SomeName<T extends Number & Comparable<? super T>>

目前,您无法在实例方法中对T施加额外的限制,因此如果您编写

public <T extends Comparable<T>> T someName(T[] SomeVariable)

这实际上是一个不同的T

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM