gpt4 book ai didi

java - > 是什么意思?

转载 作者:行者123 更新时间:2023-11-30 06:40:14 25 4
gpt4 key购买 nike

我正在查看 Java 的 TheAlgorithms 存储库,首先找到了这个: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接口(interface)。

以上是通用方法。类型变量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> 。这两个问答应该有助于解释为什么使用 ? super U提供更大的灵活性:

关于java - <T extends Comparable<T>> 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58705143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com