今天在写大作业的时候,遇到如下问题:整个方法里只有数据获取时的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) {
Syste