我有一個VO的數組列表。這些對象有很多屬性和相應的get/set方法。我想根據我將在運行時獲得的屬性對這個數組列表進行排序。 讓我詳細解釋一下。我的VO是這樣的根據運行時屬性對對象列表進行排序
public class Employee {
String name;
String id;
private String getName() {
return name;
}
private String getId() {
return id;
}
}
我將在運行時得到一個字符串'sortType',它可以是'id'或'name'。我想根據字符串的值對列表進行排序。
我試圖一起使用比較器和反射,但沒有運氣。可能是我沒有正確使用它。我不想使用if循環並創建新的比較器類。任何其他想法?
try catch應該在新類中。這是工作代碼。如果你想使用一個單獨的比較器類,請在下面@波希米亞的評論中找到它。
String sortType = "name"; // determined at runtime
Collections.sort(results, new Comparator<Employee>() {
public int compare(Employee c1, Employee c2) {
try{
Method m = c1.getClass().getMethod("get" + StringUtils.capitalize(sortType));
String s1 = (String)m.invoke(c1);
String s2 = (String)m.invoke(c2);
return s1.compareTo(s2);
}
catch (Exception e) {
return 0;
}
}
});
請使用適當的語言標籤。 – NPE
哎呀..我已經添加了。 – jijo
如果您發佈使用反射的代碼,我們可能會告訴您哪裏出了問題... – akuhn