此代码用于对列表进行排序。该列表可能包含数千个元素但少于10k。我被建议不要在这里使用反射......为什么不呢?
protected <E> int compareFields(E o1, E o2, String fieldName){
try {
Comparable o1Data = (Comparable) o1.getClass().getMethod(fieldName).invoke(o1);
Comparable o2Data = (Comparable) o2.getClass().getMethod(fieldName).invoke(o2);
return o1Data == null ? o2Data == null ? 0 : 1 :
o2Data == null ? -1 : o1Data.compareTo(o2Data);
} catch(Exception e) {
throw new RuntimeException(e);
}
}
有人劝我
这样!! 要么用合适的比较,或者提取相关性的方法提供方法“请不要用的东西反射(可能以原始类型不支持的方式进行计算)或两者兼有。“
更好的方式来做到这将是很好的一个例子。
语境: 我有与数据表许多屏幕。每一个都是从List中构建的。每个数据表需要按其6列中的每一列进行排序。这些列是Date或String。
什么是上下文?排序数据集? – 2012-01-16 19:25:36
@Thomas Jungblut是的,我正在排序,名单可能在1000年。 – Dale 2012-01-16 19:27:04
那么发布的评论已经告诉你该做什么。我完全同意:如果你可以改变代码(笔记的作者似乎也假设这一点),那么通过反射来做这件事不仅是低效但可怕的代码来维护(并且非常脆弱)。 – Voo 2012-01-16 19:29:42