Java Comparator提供了要比较的属性的名称
我的问题是;我得订一份数据表。表的每一行都是存储在列表中的对象(我们称之为TableObject)。数据的每一列都是类的一个属性(通常是字符串)
当用户点击任何一列时,我必须对数据进行典型的排序。因此,我考虑将列表更改为树集,并在TableObject中实现Comparator
当我尝试重新排列树集时,问题就出现了。比较一开始相当容易(忽略了在parseInt中查找异常):
public int compare(TableObject to1, TableObject to2){
TableObject t1 = to1;
TableObject t2 = to2;
int result = 1;
if(Integer.parseInt(t1.getId()) == Integer.parseInt(t2.getId())){result=0;}
if(Integer.parseInt(t1.getId()) < Integer.parseInt(t2.getId())){result=-1;}
return result;
}
但是,当我必须按数据的文本或TableObject拥有的其他几十个数据重新排序时,我遇到了一个问题。 我不想创建几十个比较函数,每个函数对应一个。我不喜欢使用开关(或一系列ifs)来决定如何比较对象
有没有什么方法可以做到这一点(比如反身),这并不意味着我将编写数百行几乎相同的代码
谢谢大家
# 1 楼答案
是的,您可以使用reflection API,根据字段的名称获取字段的内容
参见^{} 类,尤其是^{} 方法
(不过我不建议这样做,因为反射不是为这种任务设计的。)