【发布时间】:2012-11-14 02:06:30
【问题描述】:
我有一个List 的Value Objects [VO]。这些对象有许多属性和相应的 get/set 方法。我想根据我将在运行时获得的属性对这个List 进行排序。
让我详细解释一下……
我的语音是这样的:
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;
}
}
});
【问题讨论】:
-
请使用适当的语言标签。
-
如果您发布使用反射的代码,我们或许可以告诉您出了什么问题……
-
我已经添加了我尝试过的代码。
-
try 块是否不适用于将由 new Comparator() 创建的内部类?我是在想。我在 compare() 方法的前 3 行遇到错误。
-
伙计们.. 我应该删除帖子中所有无效的代码吗?这是我的第一篇文章,对程序不太了解。
标签: java list sorting reflection comparator