版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Mr_yangzc/article/details/84643676
编写公共接口,减少修改,但是传入的泛型在公共接口实现类中要用到泛型具体的属性值该如何实现?
本次采用反射
1.公共接口
public interface BaseB<T> {
void get11(T t);
}
2.公共接口实现类
public class a<T> implements BaseB<T> {
@Override
public void get11(T t) {
Class<?> aClass = t.getClass();
Field[] fields = aClass.getFields();
Field[] declaredFields = aClass.getDeclaredFields();
try {
//获取get方法获取属性值 传入属性名称
PropertyDescriptor pd = new PropertyDescriptor("stnm", aClass);
Method rm = pd.getReadMethod();
// 这块一定要传入t 而不是 t.getClass().newInstance()
String invoke = (String) rm.invoke(t);
// 获取属性值
Field sysids = t.getClass().getDeclaredField("stnm");
sysids.setAccessible(true);
// 这块一定要传入t 而不是 t.getClass().newInstance()
String o1 = (String) sysids.get(t);
System.out.println(o1);
} catch (Exception e) {
e.printStackTrace();
}
// for (Field declaredField : declaredFields) {
// try {
// declaredField.setAccessible(true);
//// String sysid = (String) declaredField.get("sysid").;
// System.out.println();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
System.out.println();
}
从上边的案例中可知 通过反射的方法获取
1、属性的get方法获取属性值
//获取get方法获取属性值 传入属性名称
PropertyDescriptor pd = new PropertyDescriptor("stnm", aClass);
Method rm = pd.getReadMethod();
// 这块一定要传入t 而不是 t.getClass().newInstance()
String invoke = (String) rm.invoke(t);
2、直接获取属性值
// 获取属性值
Field sysids = t.getClass().getDeclaredField("stnm");
sysids.setAccessible(true);
// 这块一定要传入t 而不是 t.getClass().newInstance()
String o1 = (String) sysids.get(t);
需要注意一点 因为一开始已经传入 T , [ public void get11(T t) ] ,在反射过程中 要传入t而不是传入t.getClass().newInstance()