是什么<T延伸可比<T >>是什么意思?

大卫·董:

我一直在寻找在TheAlgorithms存储库java和来到这个第一:https://github.com/TheAlgorithms/Java/blob/master/Searches/SearchAlgorithm.java我看到<T extends Comparable<T>>了,我不知道这意味着什么。我只知道泛型一点点,我知道,语法与参数类型界限的东西,但是这将是巨大的,如果有人能阐明如何与做的Comparable<T>,什么Comparable<T>是。

有关于这个论坛类似地雷负责落实一些其他的问题<T extends Comparable<T>>,但答案还没有真正明确什么Comparable<T>是。

色拉:

首先,你必须在Comparable这大致样子接口:

public interface Comparable<T> {

    int compareTo(T other);
}

正如你所看到的类型,参数Comparable作为的参数compareTo方法。通常,对于所述类型参数T是被实现在同一类Comparable的接口。此通用设置便于比较相同类型彼此的实例。下面是一个例子:

public class Name implements Comparable<Name> {

    @Override
    public int compareTo(Name other) {
        // compute & return result
    }
}

现在让我们假设你有这应该根据自己的自然顺序返回最大的两个对象的方法。这种方法可能如下所示:

public static <U extends Comparable<U>> U max(U left, U right) {
    return left.compareTo(right) >= 0 ? left : right;
}

注意:使用U作为类型变量而不是T显示它从是单独的T在所使用的Comparable接口。

上面是一个通用的方法。类型变量U由被上界Comparable<U>这意味着,在用于替代类型参数U必须是分配给(即,子类型)Comparable<U>举例来说,如果我们使用Name的类型参数,将工作,因为Name是分配给Comparable<Name>之所以将上界为Comparable<U>是,该方法需要调用compareTo以便正确地发挥功能。

Name name1 = ...;
Name name2 = ...;

Name max = max(name1, name2); // U is inferred to be Name

如上所示,具有U作为返回值类型也允许分配结果到相同的类型的参数的变量。


需要注意的是最大的灵活性的max方法实际上应该像这样宣称:

public static <U extends Comparable<? super U>> U max(U left, U right) {
    return left.compareTo(right) >= 0 ? left : right;
}

区别在于使用的Comparable<? super U>作为结合的上部,而不是Comparable<U>这两个Q&至于应该帮助为什么用解释? super U提供了更大的灵活性:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章