我无法看到何时使用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)
有什么区别,什么时候使用?我的目标是使类可以访问最大数量的数据类型。
答案 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数组。但请记住,这不允许您对基元进行排序。如果要支持原语,则需要使用方法重载。
您的第三个选项与您的第一个选项非常相似。