簡體   English   中英

使用Comparator對數組排序時發生ClassCastException

[英]ClassCastException while sorting an array using Comparator

我喜歡這個類來比較Y坐標(降序),並且我有預定義的Point類。

在主類中,我要發送Compare Y數組,該數組將保持點(類型=點) Arrays.sort(array); 它給了我ClassCastExeption

我該如何解決這個問題。


public class CompareY  implements Comparator<Point> {

public CompareY(){
}

@Override
public int compare(Point a1, Point a2) {

    if (a1.y > a2.y)
        return -1;
    else if (a1.y < a2.y)
        return 1;
    else {
        if (a1.x < a2.x)
            return 1;
        else if (a1.x > a2.x)
            return -1;
        else
            return 0;
    }

}

Arrays.sort(Object [] a)方法需要一個實現Comparable的類型。 如果您正在創建數組CompareY對象,你要注意, CompareY沒有實現Comparabe ,因此,你會得到一個ClassCastException運行時,因為CompareY不能轉換為Comparable 同樣,如果要創建Point對象的arrayClassCastException由於Points不實現Comparable ,因此仍然會收到ClassCastException

解決此問題:

  1. 創建一個Point對象array
  2. 使用帶有ComparatorArrays.sort方法。

范例:

Point[] points = new Point[]{new Point(..),new Point(...)};
Arrays.sort(points,new CompareY());

或者,您可以讓Point類實現Comparable並定義Points的自然順序。 然后,您可以直接使用Array.sort(Object[] a)方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM