【发布时间】:2020-04-15 17:58:24
【问题描述】:
对泛型有混淆/问题。我只想能够对任何类型的数组进行排序和打印,这些数组是 Number 类或 Number 的子类。我先写了 printArray 方法,效果很好。然后我编写了 bubbleSort 方法,但是在构造函数中调用它时遇到问题。有什么帮助吗?
public class DAB_NumberAnalyzer<T extends Number>
{
private T[] array;
/**
* Constructor
* @param array
*/
public DAB_NumberAnalyzer(T[] array)
{
this.array = array;
bubbleSortArray(array);
printArray(array);
}
public static <T> void printArray(T[] array)
{
for(T element : array)
{
System.out.printf("%s, ", element);
}
System.out.println("");
}
public static <T extends Comparable<T>> void bubbleSortArray(T[] array)
{
int lastPos;
int index;
T temp;
for(lastPos = array.length - 1; lastPos >= 0; lastPos--)
{
for(index = 0; index <= lastPos - 1; index++)
{
if(array[index].compareTo(array[index]) > 0)
{
temp = array[index];
array[index] = array[index + 1];
array[index + 1] = temp;
}
}
}
}
}
在构造函数中,我在调用 bubbleSortArray 方法的那一行出现错误。
错误:DAB_NumberAnalyzer 类型中的方法 bubbsleSortArray(T[]) 不适用于参数 (T[])。
不明白我是如何在调用 printArray 方法时没有收到此错误的。
我是不是把东西放错地方了?
刚开始使用泛型,还是有点模糊,不胜感激!
【问题讨论】:
-
我要说的第一件事是不要混合Class generic T和Method generic T,你使用的是相同的符号,可能你认为你可以将一个用于另一个,但它们是不同的,这个这就是您收到该错误的原因。如果您从方法签名中删除静态和方法泛型,您可以实现。并且可以使用 Comparator 进行比较。
标签: java arrays generics methods