2016-10-06 5 views
1

Collections.sort()를 사용하여 점의 List<Point2D>을 정렬하려고합니다. 나는이 비교기를 올바르게 설정했다고 생각한다. 어쨌든, 오류 메시지는 The method sort(List<T>, Comparator<? superT>) in the type Collections is not applicable for the arguments (List<Point2D>, new Comparator<Point2D.Double>(){})입니다. 아무도 왜 내 컴파일러가이 오류를 던지고 이해합니까?Point2D Comparator가 오류를 던지고

Collections.sort(points, new Comparator<Point2D.Double>() { 
    public int compare(Point2D.Double p1, Point2D.Double p2) { 
     return Double.compare(p1.getX(), p2.getX()); 
    } 
}); 
+0

당신이 Point2D''의 목록이있는 경우 다음 Point2D''에 대한 비교가 필요합니다. 현재 당신은 'Point2D.Double'에 대한 비교기가 동일하지 않습니다. – Turamarth

답변

2

단지 .Double를 제거하십시오 ComparatorList의 동일한 유형 (또는 유형의 부모)이어야한다. List 다음 Comparator 유형 T 또는 (T 자체를 포함한다)는 상위 클래스 일 수 T 인 경우

Collections.sort(points, new Comparator<Point2D>() { 
     public int compare(Point2D p1, Point2D p2) { 
      return Double.compare(p1.getX(), p2.getX()); 
     } 
    }); 
+0

수퍼 유형을 의미하는 "같은 유형"도 유효합니다. – MordechayS

+0

예 수퍼 유형도 유효하지 않습니다 하위 유형, Point2D.Double은 Point2D의 하위 유형입니다 –

+0

나는 그것을 지적하고 있습니다 ....... – MordechayS

0

CollectionsJava documentation에서, 우리는 방법에 sort(List<T> list, Comparator<? super T> c) 것을 알 수있다. 귀하의 경우에는

, 당신은 List<Point2D> & Comparator<Point2D.Double> 있고, Point2D.DoublePoint2D의 부모 클래스가 아닙니다.

<? super T>에 대해서는 this link을 참조하십시오.

다음에 코드를 변경

:

List<Point2D> points = new ArrayList<Point2D>(); 
Collections.sort(points, new Comparator<Point2D>() { 
    public int compare(Point2D p1, Point2D p2) { 
     return Double.compare(p1.getX(), p2.getX()); 
    } 
}); 
관련 문제