泛型与对象与可比较

时间:2016-11-02 08:01:04

标签: java types

我无法看到何时使用Generics与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)

有什么区别,什么时候使用?我的目标是使类可以访问最大数量的数据类型。

2 个答案:

答案 0 :(得分:1)

要了解的概念性事项:Java数组是协变的!

这意味着:您可以编写类似

的方法
public void sort(Object[] data)

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

这样做的好处是你可以编写有效的代码&#34;通常&#34;用于各种不同的输入。

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

因此,Java语言人员决定制作泛型,更具体地说是泛型不变的集合。因此,你无法做到

public void sort(List<Number> numbers)

并使用List<Integer>调用该内容。

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

答案 1 :(得分:-1)

Object []仅在您需要混合类型数组时才有用 - 一些整数,一些字符串等或支持遗留代码。在你的情况下,这不是一个好主意(即你为什么要混合类型一起排序)。

更好的选择是使用Generic数组。但请记住,这不允许您对基元进行排序。如果要支持原语,则需要使用方法重载。

您的第三个选项与您的第一个选项非常相似。