java - 泛型、对象、比较

标签 java types

我很难看出何时使用泛型与 Object 之间的区别。现在我正在实现快速排序,并且已经看到了使用

完成的示例

Generics -public static <T extends Comparable<T>> void qsort(T[] arr, int a, int b)
Objects -public static void quicksort(Object[] a, int left, int right)
Comparable -<T extends Comparable<T>> void sort(T[] a)

到底有什么区别以及何时使用它们?我的目标是使该类可以访问最多数量的数据类型。

最佳答案

需要了解的概念性知识:Java 数组是协变的!

这意味着:你可以编写一个类似的方法

public void sort(Object[] data)

并将其与对象数组一起使用,还可以与 Integer[]、String[] 等一起使用。

这样做的优点是您可以编写适用于各种不同输入的“通用”代码。

但问题在于,它可能会在运行时导致意外,例如当您的数组包含 Integer 和 String 对象时。

因此,Java 语言人员决定创建泛型,更具体地说是泛型集合不变。因此你不能这样做

public void sort(List<Number> numbers)

并用一些 List<Integer> 来调用它.

从这个意义上说:当使用数组时,使用泛型没有多大意义。但是:当使用泛型时,您(大多数时候)会更喜欢使用集合而不是数组!然后,您必须真正了解概念差异。

关于java - 泛型、对象、比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40374971/

相关文章:

python - GraphQL - 'either/or' 用于多个必填输入字段

C++ 不完整类型错误

java - 从 java.util.Date 转换为 java.sql.Timestamp 的问题

c++ - 我们什么时候需要提及/指定数字文字的整数类型?

collections - 我怎样才能拥有一组因关联类型不同而不同的对象?

java - 无法让 Spring MVC 3.2.4 使用 UrlBasedViewResolver 为 jsp 提供服务

java - 如何在SmartGWT中的DynamicForm的StaticTextItem组件上应用样式?

java - 使用 SQL Server uniqueidentifier 在 Java 中生成顺序 GUID

java - 如何最好地在数据库中存储时间戳或日期?

java.lang.NullPointerException : null when I call a repository