可比较使用未经检查或不安全的操作

时间:2015-02-09 19:08:42

标签: java warnings

我正在尝试实现的排序类遇到问题。 我不想覆盖我在其他类中的compareTo方法,但如果我不使这个类抽象,那就是它要求我做的事情。 有什么事我可以解决这个问题吗?

compareTo方法

public int compareTo(Course other)
{
    if(this.getPoints() > other.getPoints())
        return 1;
    else if(this.getPoints() == other.getPoints())
        return 0;
    else
        return -1;
}

排序类

public abstract class Sorting implements Comparable<Course>

{

public static void Sorting(Comparable[] arr)
{
    int min; 
    Comparable temp;

    for(int i = 0; i < arr.length-1; i++)
    {
        min = i;
        for(int scan = i + 1; scan < arr.length; scan++)
        {
            if(arr[scan].compareTo(arr[min]) < 0)
                min = scan;

                temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
        }
    }   
}//end Sorting  
}//end class Sorting

这些是我得到的错误/警告

    Sorting.java:14: warning: [unchecked] unchecked call to compareTo(T) as a member
 of the raw type Comparable
                                if(arr[scan].compareTo(arr[min]) < 0)
                                                      ^
  where T is a type-variable:
    T extends Object declared in interface Comparable
Sorting.java:17: warning: [unchecked] unchecked conversion
                                        temp = arr[min];
                                                  ^
  required: Comparable<Course>
  found:    Comparable
2 warnings

我假设这是因为compareTo接受了课程其他,但我传递的是arr [min],如果就是这样,我怎么能改变它才能使它工作?

1 个答案:

答案 0 :(得分:3)

应该是

class Course implements Comparable<Course> {
    public int compareTo(Course other){...}  
    ...
}

public abstract class Sorting {
    public static void sorting(Course[] arr){
        for(int i = 0; i < arr.length-1; i++){
            int min = i;
            for(int scan = i + 1; scan < arr.length; scan++)  {
                if(arr[scan].compareTo(arr[min]) < 0){
                   min = scan;
                }
                Course temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }   
    }//end Sorting  
}

或者,您可以简单地使用

public static void sorting(Course[] arr){
    Arrays.sort( arr );
}