java反射相关基础2019-10-10

// java8 stream API Arrays.stream(T[] array)    返回以指定数组作为源的顺序
// isAssignableFrom()    native方法,确定Class对象是否相同
Field field = Arrays.stream(clazz.getDeclaredFields()).filter(e -> String.class.isAssignableFrom(e.getType()).findFirst().orElse(null);

内省 introspector
JDK中提供了一套API用来访问某个属性的getter和setter方法,这就是内省
ClassDemo classDemo = new ClassDemo(11, "张三");
BeanInfo beanInfo = Introspector.getBeanInfo(ClassDemo.class);
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor propertyDescriptor : propertyDescriptors) {
    System.out.println(propertyDescriptor.getName());
    Method readMethod = propertyDescriptor.getReadMethod();
    Object object = readMethod.invoke(classDemo);
    System.out.println(object);
}

Method invoke(Object obj, Object... args) 在具有指定参数的指定对象上调用此方法对象表示的基础方法


你可能感兴趣的:(java反射相关基础2019-10-10)