【JAVA】利用反射调用不同方法,减少重复代码

今天在写大作业的时候,遇到如下问题:整个方法里只有数据获取时的get方法不同,如何通过传递进来的不同的实例参数来使用不同的方法,而避免大段的代码copy,做到代码复用。于是今天粗略地了解了反射机制,从而解决了这个问题,代码附上:

		Map methodNameMap = new HashMap();
		methodNameMap.put(RepositorySortingByStar.class, "getStars");
		methodNameMap.put(RepositorySortingByFork.class, "getForks");
		methodNameMap.put(RepositorySortingByContributor.class,
				"getContributorsNum");

先通过一个Map,对不同的实例类映射到不同的方法名,此处也许有更好的做法,待研究

		Class 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[] {}));

此时便完成了我的需求,通过一个类解决了三个类的代码量



你可能感兴趣的:(JAVA学习)