java Method類試用
背景:在項目中有一堆javabean,要用在界面上畫一堆tableview,要對這一堆tableview進行排序,因此要寫一堆sorter類(假如為每個tableview都寫一個的話),工作量比較大。
思考:其實這些sorter類都是差不多的,只是調用的javabean不同,方法名稱不同,實現的原理,沒有什么不同,那么該如何使用一個sorter類就可對所有的tableview進行排序呢?
思考結果:也許可以用Class類與Method類,也就是什么reflect機制。
困難:從來沒用過reflect機制。
沒有過,沒關系。JDK5.0文檔與google是我最好的老師。
下面就是我的成果了:
第一步,先建個javabean:
package test;

public class Model {

private String id;
private String name;
private String description;
public Model() {
id = "id";
name = "name";
description = "description";
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

}
第二步:
package test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestMethodReflect {

public static final String ID = "Id";
public static final String NAME = "Name";
public static final String DESCRIPTION = "Description";

//方法名集合
public static final String[] ALL = { ID, NAME, DESCRIPTION };

//這是測試數據
public static final String[] MODELDATA = { "1", "Gavin",
"this is model's test data" };

/**
* @param args
*/
public static void main(String[] args) {
try {
//獲得Model類
Class model = Class.forName("test.Model");
//獲得Model類的實例
Object object = model.newInstance();
for (int i = 0; i < ALL.length; i++) {
//獲得Model類的set方法,參數為String類型
Method setMethod = model.getMethod("set" + ALL[i], String.class);
//調用set方法
setMethod.invoke(object, MODELDATA[i]);

//獲得Model類的get方法,無參數
Method getMethod = model.getMethod("get" + ALL[i], null);
//調用get方法,并輸出數據
System.out.println(getMethod.invoke(object, null));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
ok,大功告成!
成功后的思考:我只要在一個sorter類里添加一個classname的參數,添加一個methodName的參數(類型為String[]),用一個for循環就有可能用一個sorter類為每個tableview加入排序的功能。
思考:其實這些sorter類都是差不多的,只是調用的javabean不同,方法名稱不同,實現的原理,沒有什么不同,那么該如何使用一個sorter類就可對所有的tableview進行排序呢?
思考結果:也許可以用Class類與Method類,也就是什么reflect機制。
困難:從來沒用過reflect機制。
沒有過,沒關系。JDK5.0文檔與google是我最好的老師。
下面就是我的成果了:
第一步,先建個javabean:








































第二步:

































































ok,大功告成!
成功后的思考:我只要在一個sorter類里添加一個classname的參數,添加一個methodName的參數(類型為String[]),用一個for循環就有可能用一個sorter類為每個tableview加入排序的功能。
posted on 2007-12-23 14:07 花開有時 閱讀(5887) 評論(4) 編輯 收藏 所屬分類: java