2012-12-11 4 views
0

Comparable은 하나의 함수 만 내 보내며 that function은 "this"(Comparable을 구현하는 클래스) 매개 변수 하나만 허용하므로 Comparable을 매개 변수화 한 이유는 무엇입니까? Comparable가 자연 순서 부에 사용된다면, 왜이 인터페이스를 구현하는 클래스와 다른 클래스를 전달할 수 있습니까?왜 Comparable은 매개 변수화 되었습니까?

+0

몇 가지 물음표가 :) :)) – moonwave99

답변

3

인 것을 생각하면 유용합니다. 예를 들면 :

public <T extends Comparable<T>> void sort(List<T> list) 

당신이 형태 보증 된 방법으로 item.compareTo(otherItem)를 호출 할 수 있습니다 그런 식으로, 너무 오래 둘 T을만큼. 그것을을 구현할 때

은 마찬가지로, 당신은 쓸 수 있습니다 :

public int compareTo(MyClass other) 

대신 사용할 필요의 : 다음

public int compareTo(Object other) 

및 주조.

그렇습니다. Comparable<SomethingElse>을 구현하는 것은 매우 이상한 일입니다. 그러나 "이 인터페이스를 구현하는 유형"을 일반적인 방법으로 참조 할 수있는 다른 방법은 없으며 "기타"표현을 표현하는 것이 유용합니다. 깔끔하게.

2

XY의 두 가지 유형이 모두 Comparable<B> 일 수 있습니다. XY이 모두 확장되어 있거나 (B을 구현하는 경우) 이러한 개체를 자유롭게 비교할 수 있습니다.

W은 이론적으로는 Comparable<V>입니다. 즉, V과 비교할 수 있지만 이 아닌W과 비교할 수 있습니다. 지금은 좋은 유스 케이스를 생각할 수는 없지만 가능합니다.

1

AFAIK, 그것은 T가 그 자체와 비교 가능하다고 말하는 유일한 방법입니다.

그들은 이것을 표현하기 위해 몇 가지 축약어를 추가 할 수 있었지만 그다지 짧지는 않았을 것으로 생각됩니다.

0

Rajikumar, 당신은 이미 당신의 질문에 대답했습니다. Comparable은 Garantee 형식 안전성에 일반적이며 Comparable을 구현하는 클래스 인 올바른 형식의 인수를 제공하는지 확인하십시오.

0

이 매개 변수를 사용하면 instanceof 연산자를 사용할 필요가 없습니다.

Comparable은 개체의 인스턴스가 다른 인스턴스와 일치하는지 비교하는 데 자주 사용됩니다. 예를 들어 DogA가 DogB와 동일한 경우 지금 원한다면 아무도 고양이가 아니라는 것을 알 수 있습니다. 그래서 그들은 고양이가 개 이건간에 다른 기원을 가지고 있기 때문에 결코 보지 않을 것입니다. 이