나는 이런 식으로 수업을 많이 하바 :개념 증명 : 리플렉션을 사용하여 일반 비교기 메서드를 만드는 방법은 무엇입니까?
Class Person {
protected String name;
protected String surname;
...getters and setters...
}
내가 이름이나 성으로 사람의 컬렉션을 주문하고 싶습니다.
Collections.sort(listofpersons, new Comparator<Person>(){
@Override
public int compare(Person p1, Person p2) { return p1.getName().compareTo(p2.getName()); }
})
또는
Collections.sort(listofpersons, new Comparator<Person>(){
@Override
public int compare(Person p1, Person p2) { return p1.getSurname().compareTo(p2.getSurname()); }
})
내가 좋아하는, 일반적인 비교기를 구현하기 위해 노력하고있어 : 사실은 내가 간단하게이 일을하고있어
MyUtils.sort(listofpersons,"getName");
MyUtils.sort(listofpersons,"getSurame");
난의 이해하려고 노력 중이 야 제네릭과 리플렉션을 통해이를 수행 할 수는 있지만 막혔습니다. 나는이 일을 해요 :
public static <T> void sortCollection(Collection<T> list, final String methodName) {
Comparator<T> comparator = new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
try {
String a=o1.getClass().getMethod(methodName).invoke(o1).toString();
String b=o2.getClass().getMethod(methodName).invoke(o2).toString();
return a.compareTo(b);
} catch (Exception ex) {
...log somewhere...
return 0;
}
}
};
Collections.sort(list, comparator);
}
는 캐치 예외와 지금 캐스팅 문자열을 잊지는 점은, Collections.sort (컬렉션, 비교기가) 존재하지 않는다는 것입니다,하지만 난을 만드는 모르겠어요 Comparator ... 내 아이디어가 어떤 의미인지 아닌지 (이유)와 올바른 구현 방법을 알고 있는지 궁금합니다.
감사합니다.
설명과 샘플을 보내 주셔서 감사합니다. –