700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 反射获取泛型属性值

反射获取泛型属性值

时间:2023-07-28 01:19:25

相关推荐

反射获取泛型属性值

编写公共接口,减少修改,但是传入的泛型在公共接口实现类中要用到泛型具体的属性值该如何实现?

本次采用反射

1.公共接口

public interface BaseB<T> {void get11(T t);}

2.公共接口实现类

public class a<T> implements BaseB<T> {@Overridepublic 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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。