多带一个参数,public <T extends Number> T[] bubbleSort(T array[],Comparator<? super T> comp)。你的对象必须实现Comparator接口,可以参考源码Collections.java
问题很明显:The operator < is undefined for the argument type(s) T, T 就是说 ‘<’操作符没有定义这种关系比较, 因为‘<’只能比较java定义的数据类型的大小, 而这里的数据类型是T,编译的时候是通不过的, 只有在运行的时候,知道了T具体是那种类型,才能用‘<’来进行比较。
你数组里放的是对象!array[j] < array[j + 1]
能这样比较大小?
1、Number接口是定义在java.lang包中,是BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short的超类,它本身是一个抽象类,在查询了API文档之后发现它没有compareTo()这个方法,也就是说它自身是无法使用<,>和=号这些算术运算符的,这是你的一个错误,修改的方法时将Number改为Comaprable,完整的方法头是这样的:public static <T extends Comparable<T>> T[] bubbleSort(T array[])。值得一提的是所有基本类型的封装类都实现了这个接口,也就是说它能实现Number接口的功能。
2、我自己写了一个测试程序,如下:
public static void main(String[] args) {
// TODO 自动生成方法存根
Integer a[]={9,7,6,8,2,4,0};
// int b[]={9,7,6,8,2,4,0};
a=bubbleSort(a);
for(Integer temp:a){
System.out.print(temp+" ");
}
Number num=new Integer(0); }
在这个程序中bubbleSort的参数如果是b的话依然会报错,因为基本数据类型的数组类型不是T【】的子类,所以是不可以使用b。话有点多,希望对楼主有用,Good Luck!
还真没注意过这个。
多带一个参数,public <T extends Number> T[] bubbleSort(T array[],Comparator<? super T> comp)。你的对象必须实现Comparator接口,可以参考源码Collections.java
因为‘<’只能比较java定义的数据类型的大小,
而这里的数据类型是T,编译的时候是通不过的,
只有在运行的时候,知道了T具体是那种类型,才能用‘<’来进行比较。
你可以写一个方法compare(),专门负责对象比较
a.compare(b) 结果如果>0,就是a大于b