(轉載)http://blog.vsharing.com/wpskl/A990596.html
最近在研究一下怎樣盡量少使用if-else,考慮到自己的使用方式,就想到了使用java中反射機制,可以達到自己的要求,更趨於OO設計。
怎樣使用java中的反射機制:
1.首Crowdsourced Security Testing道傳給你的對象有幾種出現的情況,比如傳給我的對象有3種情況,每種情況分別調用不同的方法(methodA,methodB,methodC)。
2.在平時的代碼中一般會這樣寫,if(A)methodA if(B)methodB等等。這時候改用map來實作類別反射,把這三個方法名放入map中,map的key就是if中的條件。
3.準備好map之後,這時候來的情況不用判斷,直接用map去取出對應得方法名,通過類反射調用,通過測試ok。
4.這個方法只是適合本人現在的情況,根據實際情況進行修改。
以上內容僅供參考,希望給出寶貴意見和建議。
測試代碼如下:
import java.util.HashMap;import java.util.Map;/** * * @author wpskl * */public class MapInvoke {public void wpskl1(String ss) {System.out.println("========wpskl1=====" + ss);}public void wpskl2(String ss) {System.out.println("========wpskl2=====" + ss);}public void wpskl3(String ss) {System.out.println("========wpskl3=====" + ss);}public void test() {Map<String, String> map = new HashMap<String, String>();map.put("1", "wpskl1");map.put("2", "wpskl2");map.put("3", "wpskl3");MapInvoke mapInvoke = new MapInvoke();for (int i = 1; i < 4; i++) {String method = map.get(i + "");String param = "zhdd" + i;try {invoke(mapInvoke, method, param);} catch (Exception e) {e.printStackTrace();}}}private void invoke(Object o, String method, String param) throws Exception {o.getClass().getMethod(method, new Class[] { String.class }).invoke(o, new Object[] { param });}public static void main(String[] args) {MapInvoke mapInvoke = new MapInvoke();mapInvoke.test();}}