java 反射 java.lang.reflect.Field 、java.beans.PropertyDescriptor
最近在对接伙伴云 ,发现从API接口拿过来的数据解析后与相关实体映射赋值,并不能直接调用set方法,就想到了反射调用来实现。
伙伴云是一个款零代码的saas服务,对于简单的业务系统 感觉可以胜任。
1. java.lang.reflect.Field
field是一个类,在Java反射中field类描述的是 类的属性信息。
a) Class.getDeclaredField(String name)
获取类特定的方法,name参数指定属性的名称
b) Class.getDeclaredFields()
获取类中所有的属性(pulbic、protected、default、private),但不包含继承的属性
c) Class.getField(String name)
获取类特定的方法,name参数指定类属性的名称
d) Class.getField()
获取类中public类型的属性
常用的操作:获取属性的值、修改属性的值
注意:
a) 对于获取私有属性的时候必须先设置Accessible为true。
b) getType() 和 getGenericType()的区别 :
getType(): 获取属性声明时类型对象(返回class对象)
getGenericType() : 返回属性声名的Type类型
1.首先是返回的类型不一样,一个是Class对象一个是Type接口。
2.如果属性是一个泛型,从getType()只能得到这个属性的接口类型。但从getGenericType()还能得到这个泛型的参数类型。
3.getGenericType()如果当前属性有签名属性类型就返回,否则就返回 Field.getType()。
实例中代码
2. java.beans.PropertyDescriptor
通过PropertyDescriptor反映射调用set和get方法。
PropertyDescriptor常用的功能:包装一个属性get、set方法,通过反射调取相应的方法,
如:构造一个PropertyDescriptor -> 获取get/set方法 -> invoke
在PropertyDescriptor中,有两个重要的概念:readMethod和writeMethod,可以理解过entity中get方法和set方法。
a)构造器
PropertyDescriptor(String propertyName, Class<?> beanClass)
PropertyDescriptor(String propertyName, Class<?> beanClass, String readMethodName, String writeMethodName)
PropertyDescriptor(String propertyName, Method readMethod, Method writeMethod)
b) 主要方法:
getPropertyType() #获得属性的class对象
getReadMethod() #获得用于读取属性值的方法
getWriteMethod() #获取用于写入属性值的方法
setReadMethod(Method readMethod) #设置用于读取属性值的方法
setWriteMethod(Method writeMethod) #设置用于写入属性值的方法
实例中代码