我有一个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