gpt4 book ai didi

java - 比较器与 Apache BeanComparator

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:20 25 4
gpt4 key购买 nike

考虑一个简单的类:

class Employee {

String name;
int sal;

....//getters and setters
}

例如,我可以创建一个比较器来对字段名称进行排序。

class EmpSortByName implements Comparator<Employee>{

@Override
public int compare(Employee e1, Employee e2){
return e1.getName().compareTo(e2.getName());
}
}

但是,查看 apache commons BeanComparator,排序可以通过以下方式实现:

BeanComparator bc = new BeanComparator("name");
Collections.sort(employeeList, bc);

因此,通过使用 BeanComparator,我可以用最少的代码实现排序。使用 Comparators 和 BeanComparators 之间的权衡是什么:在性能、使用场景(多字段排序、其他因素)方面?

我还了解到,要使用 BeanComparator,必须导入 beanutils jar。

最佳答案

BeanComparator 使用反射来访问 name 属性并比较两个对象。虽然反射性能有所提高,但仍然不如直接访问字段快。这是否重要取决于它在您的应用程序中被调用的次数以及在何种上下文中。

另一个问题是,如果重构方法并将其重命名为getLastName(),则使用BeanComparator 的代码将不会被重构,直到运行时(或单元测试时)才会发现问题).

坦率地说,实现比较器非常简单,我认为使用反射不是一个好主意。避免 4 行琐碎代码的好处不足以补偿它导致的性能和可维护性问题。

关于java - 比较器与 Apache BeanComparator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com