![](/img/trans.png)
[英]java generics - The method evaluate(T,T) in the type T is not applicable for the arguments (Comparable, Comparable<capture#11-of ?>)
[英]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.