妙用Java反射,让代码更加优雅

最近在改公司项目bug,需要修改别人的代码。在读别人的源码时感觉到反射真的是能够极大的提高代码的优雅性,在某些特定场景能极大的简化代码的编写。因此写了这篇文章用以记录分享。

我们先还原一下场景,在做数据展示的时候,需要处理传入接口的实体类。但实体类中的字段特别多,只需要展示以"tcp_"开头的字段,现在就需要实现这样的一个接口。

为了方便讲解,我们简化一下业务。

定义实体类Model

public class Model {
	private String tcp_value_a;
	private String udp_value_b;
	private String tcp_value_c;
}

现在我们定义接口

Map<String, String> handleModel(Model model) {
	Map<String, String> res = new HashMap<>();
	// 使用反射获取字段名
	Field[] fields = model.getClass().getDeclaredFields();
	for (Field f : fields) {
		f.setAccessible(true);
		// 获取字段名
		String fieldName = f.getName();
		// 以tcp_开头
		if (fieldName.startsWith("tcp_")) {
			// 需要显示该字段数据, 记录
			res.put(fieldName, f.get(model));
		}
	}
	return res;
}

这个接口通过反射的方式,获取类中所有成员变量的名字,通过循环的方式判断是否以"tcp_"开头,通过这样的方式判断字段是否需要返回。

如果我们不使用反射的方式,那么我们可能得定义一个数组用于记录每个成员变量的姓名,然后手动编码确定字段。这样的编码十分丑陋,且不说如果字段数量有多少,如果字段变更,需要变动的代码时非常大的,程序的拓展性将会极差。

在涉及与方法名相关操作的场景中,通常应优先考虑反射机制是否能够提供解决方案。

你可能感兴趣的:(java,开发语言,反射)