我很难看出何时使用泛型与 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/