Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改一个方法的签名_Java - Fatal编程技术网

Java 更改一个方法的签名

Java 更改一个方法的签名,java,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[

所以我有下面的方法

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>();
}
我不能使用收集方法或comparator对象。

您使用的是.compareTo方法,而该方法不是由object类实现的,这反过来又不会使冒泡排序工作,因为将不会实现.compareTo方法

在您的情况下,我认为最好创建一个实际实现可比较接口的项的数组列表,这与您试图更改方法签名以适应方法调用的操作相反

一旦完成此操作,就应该能够通过使用方法将列表转换为数组来调用该方法


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

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

如何更改方法签名,以便能够从以下内容调用它

public int sortByTitle()
{
    return Sorting.bubbleSort(lib); // (lib is  lib = new ArrayList<Object>();
}
你可以这样改变它:

public static <T extends Comparable<? super T>> void bubbleSort(List<T> a)
但是,更改签名是不够的,因为您必须使用.size而不是.length、.geti而不是[i]等等。换句话说,您必须重写该方法


同样,该方法将只适用于可比较对象列表,而不是任意对象列表。

我收到以下编译消息错误:类排序中的方法bubbleSort无法应用于给定类型;必需:T[]找到:java.util.List原因:不存在类型变量T的实例,因此参数类型java.util.List符合形式参数类型T[]此处使用的运算符不能用于正在使用它的值类型。您可能使用了错误的类型,或者使用了错误的运算符。@valentin:正如我在回答中所说的,您不能传递整个对象数组,原因很简单,对象类没有实现可比较的接口,这是气泡排序机制工作所需的。正如我在回答中所建议的,您将需要使用实现可比较接口的不同数据类型。一旦你这样做了,你应该能够让它工作。请注意我提出的其他建议,但如果我像你建议的那样使用数组列表,这难道不意味着我必须使用列表方法来运行top和bottom之类的东西吗?我正在寻找的东西,一定不能使用收集方法或比较对象。。。我有点困惑:@valentin:在回答中,我建议如何将列表切换回数组。另外,如果你不能使用比较器,那么你不应该使用.compareTo方法。谢谢@ninti…我已经将列表复制到一个数组中…使用它,然后返回到一个列表