没有外贸网站 如果做外贸营销网络是什么
最近在改公司项目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_"开头,通过这样的方式判断字段是否需要返回。
如果我们不使用反射的方式,那么我们可能得定义一个数组用于记录每个成员变量的姓名,然后手动编码确定字段。这样的编码十分丑陋,且不说如果字段数量有多少,如果字段变更,需要变动的代码时非常大的,程序的拓展性将会极差。
在涉及与方法名相关操作的场景中,通常应优先考虑反射机制是否能够提供解决方案。