1. 程式人生 > >【JAVA】利用反射呼叫不同方法,減少重複程式碼

【JAVA】利用反射呼叫不同方法,減少重複程式碼

今天在寫大作業的時候,遇到如下問題:整個方法裡只有資料獲取時的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[] {}));

此時便完成了我的需求,通過一個類解決了三個類的程式碼量