反射的使用
注意:抽象类和接口类不适用,请绕行!!!!
反射常用场景:不同类里边有通用的方法需要灵活调用,这样可以方便减少代码的冗余,提高代码的可读性,但要慎用,根据实际情况判断是否使用;
作者使用场景:n多个不同名称的实现类里边有相同的一个方法且参数一致,
为了不让if,else堆积成山固然小编用了反射原理;话不多说,直接上代码;
);
Class<?> clazz2 = Class.forName("com.ccie.net.feignService." + serviceName);
Method tbStatus = clazz2.getMethod("TbStatus", WtElectricityDTO.class);
tbStatus.setAccessible(true);
//因为接口和抽象类不能实例化,所以反射无法获取接口注入
Object invoke = tbStatus.invoke(serviceXZ(serviceName), wtElectricityDTO);
NetHallElectricityFzVO netHallElectricityFzVO = (NetHallElectricityFzVO) invoke;
第一行根据枚举定义获取接口名称
第二行获取接口的.class文件,
第三行调用你的通用方法,参数1:方法名称,参数2:参数实体.class(如果为get请求那就STRING,INT),
第四行 要知道getMethod方法只能获取public级别的方法,所以第四行为了忽略所以进行暴力获取,你也可以调用其他方法API获取私有的方法,
第五行正式调用,第一个参数为new的实现类,第二个参数为入参参数