나는 모든 클래스의 객체를 비교할 수있는 범용 비교기를 작성하고 싶습니다. 숫자를 먼저 쓰고 문자열을 입력 한 다음 다른 모든 비교 가능한 객체를 원합니다. 두 개체가 서로 비교되는지 확인하는 방법은 무엇입니까?
먼저 나는o1 instanceof Comparable && o2 instanceof Comparable
는 숫자, 문자열 및 기타 모든 비교 클래스 내에서 비교 나에게 줄 것이다 체크를 생각
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Number && !(o2 instanceof Number)) {
return -1;
}
else if(o2 instanceof Number && !(o1 instanceof Number)) {
return +1;
}
else if(o1 instanceof String && !(o2 instanceof String)) {
return -1;
}
else if(o2 instanceof String && !(o1 instanceof String)) {
return +1;
}
else if(o1 instanceof Comparable && !(o2 instanceof Comparable)) {
return -1;
}
else if(o2 instanceof Comparable && !(o1 instanceof Comparable)) {
return +1;
}
else if(o1 instanceof Comparable && o2 instanceof Comparable) {
return ((Comparable)o1).compareTo(o2);
}
else {
return o1.hashCode() - o2.hashCode();
}
}
을 썼다.
그러나 그 다음에 Number
은 비교할 수 없다는 것을 알았습니다. 즉, 정수와 double을 비교할 수 없습니다.
나는 또한 Comparable<T>
계약이 퍼지라는 것을 알았습니다. T
은 어떤 클래스라도 될 수 있지만 실제로는 클래스를 구현하는 클래스와 같아야합니다.
그래서 어떻게 수행합니까?
_ 보편적 인 comparator_를 쓰고 싶습니다. 당신은 항상 올바르게 처리하지 않았거나 전혀 처리하지 못한 경우가 있습니다. 그것은 문제를 해결할 것보다 더 두통을 일으킬 것입니다. –
실제로 그렇게 할 수 없기 때문에이를 수행 할 적절한 방법이 없습니다. –
제목 질문에 대한 답은 무엇입니까? –