【JAVA】利用反射呼叫不同方法,減少重複程式碼
阿新 • • 發佈:2019-02-08
今天在寫大作業的時候,遇到如下問題:整個方法裡只有資料獲取時的get方法不同,如何通過傳遞進來的不同的例項引數來使用不同的方法,而避免大段的程式碼copy,做到程式碼複用。於是今天粗略地瞭解了反射機制,從而解決了這個問題,程式碼附上:
Map<Class, String> methodNameMap = new HashMap<Class, String>(); methodNameMap.put(RepositorySortingByStar.class, "getStars"); methodNameMap.put(RepositorySortingByFork.class, "getForks"); methodNameMap.put(RepositorySortingByContributor.class, "getContributorsNum");
先通過一個Map,對不同的例項類對映到不同的方法名,此處也許有更好的做法,待研究
Class<RepositoryVO> clz = RepositoryVO.class; Method method = null; // 通過反射機制呼叫不同方法 try { method = clz.getMethod(methodNameMap.get(strategy.getClass()), // 獲取該方法,由於這些方法都是普通的get方法,無引數需要傳遞 new Class[] {}); } catch (NoSuchMethodException e) { System.out.println("reflection question"); } catch (SecurityException e) { System.out.println("reflection question"); }
此處完成了獲得具體所需要的方法
int min = (int) (method.invoke(voList.get(voList.size() - 1), new Object[] {})); // voList是所有資料的集合,利用反射所獲得的方法獲取該例項所對應需要統計的資料
int max = (int) (method.invoke(voList.get((int) (voList.size() * PERCENT_OF_MAX) - 1), new Object[] {}));
此時便完成了我的需求,通過一個類解決了三個類的程式碼量