これは何千回も要請されていますが、私が見た答えはすべて、渡されたオブジェクトでは機能しません。常にがObjectおよびフィールドにハードコードされています。私は文字列フィールドに基づいてリスト/ベクトルをソートする方法を探しています。 ReflectionやVoodooの魔法を使っても構わない。任意のオブジェクトのリスト/ベクトルを任意のメンバのフィールドでソートできますか?
私が書いた方法は、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