Java泛型方法结构解释

Java泛型方法结构解释,java,generics,Java,Generics,我试图学习java泛型,从下面的方法定义中,有人可以解释为什么我们在返回类型之前声明 public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) public static int countgreater大于(T[]数组,T元素) 我知道Compariable接口的用法,但是为什么在返回方法类型之前需要这个 相反,我们可以像public static int co

我试图学习java泛型,从下面的方法定义中,有人可以解释为什么我们在返回类型之前声明

public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem)
public static int countgreater大于(T[]数组,T元素)

我知道Compariable接口的用法,但是为什么在返回方法类型之前需要这个

相反,我们可以像
public static int countGreaterThan(T[]anArray,T elem)
那样编写,它也将接受泛型参数


所以我的问题是,为什么我们需要
或者只需要一个

它只是意味着泛型类型
T
必须扩展
Comparable
。通过告诉编译器,您的
T
对象将拥有
Comparable
的所有公共方法。

这意味着泛型类型
T
必须扩展
Comparable
。通过告诉编译器,您的
T
对象将拥有
compariable
的所有公共方法。

compariable
是一个接口,其契约意味着“我们可以将此对象与T类型的对象进行比较”。如果对象本身属于该类型T,则该对象与自身具有可比性。这就是我们在这里想要的行为。类似行为的示例包括实现<代码>可比

在这里,此方法要求传入与自身类似的对象

如果这些对象属于T类型,则它们必须实现
可比
,以便彼此可比。由于generic extends/implements约束在所有情况下都使用关键字
extends
,因此generic声明是
T extends compariable

compariable
是一个接口,其契约表示“我们可以将此对象与类型T中的一个进行比较”。如果对象本身属于该类型T,则该对象与自身具有可比性。这就是我们在这里想要的行为。类似行为的示例包括实现<代码>可比

在这里,此方法要求传入与自身类似的对象


如果这些对象属于T类型,则它们必须实现
可比
,以便彼此可比。由于generic extends/implements约束在所有情况下都使用关键字
extends
,因此generic声明为
T extends Comparable

,该方法采用一个项目数组和一个项目,我从名称猜它将返回
anArray
中“大于”的项目数
elem


这将适用于定义明确的“大于”关系的任何类型
T
,即与自身具有可比性的任何类型,这正是
所表达的-任何类型
T
,只要该类型是
可比较的
的实现,并且目标类型本身作为其类型参数。

该方法采用一个项目数组和一个项目,我从名称猜,它将返回
anArray
中“大于”
elem
的项目数


这将适用于定义明确的“大于”关系的任何类型
T
,即与自身具有可比性的任何类型,这正是
所表达的内容-任何类型
T
,只要该类型是
可比
的实现,并且目标类型本身作为其类型参数。

能够访问:
可比(To)我们必须扩展

为什么,因为只有这样我们才能访问它,因为它事先不可用


维基百科有一篇关于

的优秀文章,可以访问:
compareTo(To)我们必须扩展

为什么,因为只有这样我们才能访问它,因为它事先不可用


Wikipedia有一篇关于

的优秀文章,它限制T必须是一个实现可比的类,这样T的一个实例就可以与T的另一个实例进行比较

它限制T必须是一个实现可比的类,这样T的一个实例就可以与T的另一个实例进行比较

T表示任何类型。所以如果你有这个方法

public static int countGreaterThan(T[] anArray, T elem)
这意味着你可以这样称呼它:

public static int countGreaterThan(String[] anArray, String elem)
或与任何其他类。这里唯一的限制是用T表示的两个类是相同的

>意味着T需要是Comparable的一个子类。所以T需要实现可比性。例如Integer,它实现了Comparable。也就是说,Integer具有Integer.compareTo(Integer i)方法


如果希望使用该接口定义的某些方法,则>约束可能会有用。对于方法countGreaterThan():此方法需要使用.compareTo()来确定输入对象是否大于另一个,因此每个输入对象都需要使用.compareTo()-方法。所以您声明了>,现在可以使用.compareTo()。

T表示任何类型。所以如果你有这个方法

public static int countGreaterThan(T[] anArray, T elem)
这意味着你可以这样称呼它:

public static int countGreaterThan(String[] anArray, String elem)
或与任何其他类。这里唯一的限制是用T表示的两个类是相同的

>意味着T需要是Comparable的一个子类。所以T需要实现可比性。例如Integer,它实现了Comparable。也就是说,Integer具有Integer.compareTo(Integer i)方法


如果希望使用该接口定义的某些方法,则>约束可能会有用。对于方法countGreaterThan():此方法需要使用.compareTo()来确定输入对象是否大于另一个,因此每个输入对象都需要使用.compareTo()-方法。所以您声明了>,现在可以使用.compareTo()。

因为这是一个静态函数,所以必须附带关于T的信息。例如,T将已经被定义/约束