이것은 1000 번이나 부탁되었지만, 내가 본 모든 대답은 전달 된 객체에서 작동하지 않으며, 항상 에 하드 코딩 된 Object 및 필드입니다. 문자열 필드를 기반으로 List/Vector를 정렬하는 방법을 찾고 있습니다. 리플렉션이나 부두 마법을 사용하면 괜찮습니다.개체 목록/벡터를 구성원의 필드로 정렬 할 수 있습니까?
작성한 방법은 입니다. StackOverFlowError (말장난입니다!).
StandardComparator.sort("distance",Vector<?>)StaticItems.LocationList,Item.SingleLocation.class);
StandardComparator 클래스는 다음과 같이 정의된다 :
public class StandardComparator {
public static void sort(final String field, Vector<?> locationList, final Class typeOfObject){
Collections.sort(locationList, new Comparator<Object>() {
@Override
public int compare(Object object1, Object object2) {
try {
return this.compare(typeOfObject.getField(field),typeOfObject.getField(field));
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
return 0;
}
});
}
}
오류 :
E/AndroidRuntime(22828): FATAL EXCEPTION: Thread-10
E/AndroidRuntime(22828): java.lang.StackOverflowError
E/AndroidRuntime(22828): at java.lang.reflect.Field.<init>(Field.java:89)
E/AndroidRuntime(22828): at java.lang.reflect.Field.<init>(Field.java:81)
E/AndroidRuntime(22828): at java.lang.reflect.ReflectionAccessImpl.clone(ReflectionAccessImpl.java:42)
E/AndroidRuntime(22828): at java.lang.Class.getField(Class.java:870)
E/AndroidRuntime(22828): at com.AtClass.Extras.StandardComparator$1.compare(StandardComparator.java:24)
SingleLocation 개체 :
다음과 같이나는 나의 메소드를 호출210
원하는 방식으로 작동하려면 compare() 메소드에 물건을 더 추가해야합니다. 슈퍼 클래스 메서드를 호출하면 작동하지 않습니다 (기본 동작 이후). – ngesh