此代碼用於對列表進行排序。該列表可能包含數千個元素但少於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