Pre-TL; DR : 비교기가 다른 비교기의 인스턴스이거나 다른 비교기의 인스턴스인지 여부를 확인해야합니다.반전 된 비교기와 원본의 동등성을 확인하는 방법은 무엇입니까?
안녕하세요,이 문제는 매우 간단하다고 생각하지만 너무 많이 생각하고 있습니다. 사용자가 다른 비교 자별로 목록을 정렬 할 수있는 프로그램이 있습니다. 사용자는 오름차순 또는 내림차순을 선택할 수 있습니다. 비교기는 오름차순으로 기본적으로 있기 때문에, 모든 나는 순서가 새로운 반전 비교기를 만드는 것입니다 내림차순 달성하기 위해 수행
Comparator newReversedCMP = Collections.reverseOrder(Comparator originalComp)
프로그램의 또 다른 부분은 사용자가 정렬하거나 마지막을 볼 수 있도록 마지막으로 사용한 비교를 저장 비교기가 사용됩니다. 긴 소개에 대한
이if (lastCMPUsed.equals(new NameComparator()){
return "Name";
}
if (lastCMPUsed.equals(new SalaryComparator()){
return "Salary";
}
미안하지만 내 문제는 내가 또한 "이름"또는 "을 반환 할 것입니다 :의 내가 예를 들어, 이름과 급여와 그것을 다루는 무엇을 반환하는 방법을 다루는 비교기 있다고 가정 해 봅시다 Salary "와 반대 인 경우에도 마찬가지입니다. lastCMPUsed가 reversedOrder CMP이면, 그것들은 동일하지 않습니다.
나는하지만 성공이 시도 :
//lastCMPUsed = Collections.reversedOrder(new NameComparator()); if (lastCMPUsed.equals(Collections.reverseOrder(new NameComparator()) return "Name";
이것은 "이름"을 반환하지 않는 그들을 같지 않은 것으로 본다. 각 비교 자의 My equals 메서드는 간단한 인스턴스 검사입니다.
읽어 주셔서 감사합니다.
글쎄, 그들은 근본적으로 같은 비교기가 아니므로 물론 '평등'은 작동하지 않습니다. 이런 논리는 iffy 디자인처럼 보인다. 왜 문자열 이름을 따로 저장할 수 없습니까? –
확인할 새 Object를 만드는 이유는 무엇입니까? 왜 클래스 속성을 사용하지 않습니까? if (lastCMPUser.getClass(). equals (NameComparator.class) 또는 심지어 instanceof – mprabhat
나는이 문제에 대한 샘플 코드를 제공하려고 시도하면서 실제로 총을 뛰었습니다. 실제로이 문제를 해결했습니다.이 질문은 삭제할 수 있습니다. if lastCMPUsed.equals (Collections.reverseOrder (new NameComparator()) "Name"을 반환합니다. lastCMPUsed가 NameComparator의 역순 인 경우 실제로 작동합니다. – theSack