更改一个方法的签名

时间:2012-05-03 08:14:11

标签: java

所以我有以下方法

public static <T extends Comparable<? super T>> void bubbleSort( T[] a)
//public static void bubbleSort(Comparable[] a)
{
    for(int top = a.length-1; top > 0; top--)
        for(int i = 0; i < top; i++)
            if(a[i+1].compareTo(a[i]) < 0)
            {   T tmp = a[i];

                //Comparabl tmp = a[i];
                a[i] = a[i+1];
                a[i+1] = tmp;
            }
}

如何更改方法签名以便能够从

这样的方式调用它
public int sortByTitle()
{
    return Sorting.bubbleSort(lib); // (lib is  lib = new ArrayList<Object>();
}

我不能使用收集方法或比较对象。

2 个答案:

答案 0 :(得分:0)

您正在使用.compareTo类未实现的Object方法,而这种方法又不会使您的冒泡排序工作,因为.compareTo没有实现方法

在您的情况下,我认为最好创建一个实际实现类似接口的项目数组列表,这与您尝试执行的操作相反(更改方法签名以适合方法调用)。

一旦你完成了,你应该能够通过使用toArray方法将列表转换为数组来调用方法。

另一件值得注意的事情是你的bubbleSort方法没有返回任何内容,因此你的方法调用不应该编译。

答案 1 :(得分:0)

简而言之,在确保lib的元素实现Comparable之前,您将无法执行此操作(如果您无法比较元素,则无法排序)。

  

如何更改方法签名以便能够从

这样的方式调用它

你可以改变它:

public static <T extends Comparable<? super T>> void bubbleSort(List<T> a)

但是,更改签名是不够的,因为您必须使用.size()代替.length.get(i)而不是[i]等。单词,你必须重写方法。

该方法再次适用于Comparable的列表,而不是Object的任意列表。