我有一个List
值对象[VO]。这些对象有许多属性和相应的 get/set 方法。我想List
根据我将在运行时获得的属性对其进行排序。让我详细解释一下...
我的VO是这样的:
public class Employee {
String name;
String id;
private String getName() {
return name;
}
private String getId() {
return id;
}
}
我将sortType
在运行时得到一个字符串,它可以是"id"
或"name"
。我想根据String
.
我曾尝试同时使用Comparator
和反射,但没有运气。可能是我没有正确使用它。我不想使用条件if
块分支来创建Comparator
需要的任何新的特定[匿名内部类](在运行时)。还有其他想法吗?
try catch 应该在新类中。这是工作代码。如果您想为 使用单独的类Comparator
,请在下面的@Bohemian 评论中找到它。
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;
}
}
});