最近在看一個算法課程,老師用的是c++的template和函數指針來完成一個實現,于是我想用java通過反射和泛型來完成,但是出現了問題。
希望通過java反射以及泛型來實現動態測試SortClass中的各種排序函數,這時getmethod方法和invoke方法的參數不知道如何解決了。我寫的這個實現一直報參數異常
代碼
class SortClass<T extends Comparable>{
//選擇排序
public void selectSort(T[] a){
for(int i = 0; i < a.length; i++){
int min = i;
for(int j = i+1; j < a.length; j++){
if(a[j].compareTo(a[min]) < 1){
swap(a,j,min);
}
}
}
}
//交換函數
public void swap(T[] arr, int a, int b){
T temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//測試用時函數
public void testSort(String sortName,Object[] a){
long startTime = System.currentTimeMillis();
try {
Method method = this.getClass().getMethod(sortName,Object[].class);
method.invoke(this,a);
} catch (NoSuchMethodException e) {
System.out.println(e.getMessage()+" not find");
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println(sortName + "use time:" + (endTime-startTime));
}
}
希望能有一些改進的方法或者代碼來完成這個實現。
添加回答
舉報
0/150
提交
取消