gpt4 book ai didi

java - Comparable 与 Raw Comparable

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:32 24 4
gpt4 key购买 nike

我最近为了好玩而编写了一个简单的通用选择排序方法,当时我对某些事情感到有点困惑。这是我的代码:

public static <T extends Comparable<T>> void sort(List<T> list) {
for (int i = 0; i < list.size(); i++) {
int minIndex = i; // Assume that the first element is the minimum for now.

// Find smallest element in unsorted sub-list.
for (int k = i + 1; k < list.size(); k++) {
if (list.get(k).compareTo(list.get(minIndex)) < 0) {
minIndex = k;
}
}

// Swap smallest element with the first element in unsorted sub-list.
T temp = list.get(i);
list.set(i, list.get(minIndex));
list.set(minIndex, temp);
}
}

函数本身工作正常,但我对泛型有点困惑。我使用:

<T extends Comparable<T>>

确保给定的列表具有可比较的类型。但是如果我改用原始的 Comparable 呢?即:

<T extends Comparable>

具体会有什么影响?

谢谢!

最佳答案

基本上,您失去了一些类型安全性。

当您拥有 T temp = list.get(i) 时, 你能用 temp.compareTo 做什么?

  • T extends Comparable<T> , tempComparable<T> ,这意味着您只能传递另一个 T进入compareTo
  • T extends Comparable , tempComparable ,这意味着您可以将任何内容传递给 compareTo

第一个几乎肯定是您想要的,因为可比较类型只能处理相同类型的对象。例如,String.compareTo只能处理字符串输入——如果你传入一个整数,你将得到一个 ClassCastException。

考虑到 temp.compareTo 的唯一安全输入是 T 类型的引用, 通常没有充分的理由使用原始类型。它偶尔有利于绕过类型系统,但在大多数情况下,它会消除类型安全而不会给您任何返回。

关于java - Comparable<T> 与 Raw Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095474/

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