一、引入
接入一些接口的时候常常要把Bean实体类转化成Map对象,但事在使用不同的方法的时候会有不同结果,所以在这里记录下,方便以后用到
二、实现
(1)、使用反射
1 |
|
但是上面的写法是有个问题,问题在于这段代码:
1 | Field[] fields = obj.getClass().getDeclaredFields(); |
以上是获取类的字段
关于获取类的字段有两种方式
getFields()
和 getDeclaredFields()
先看看这两者的区别吧:
getFields()
:获得某个类的所有的公共(public)的字段,包括父类中的字段。getDeclaredFields()
:
获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
同样类似的还有getConstructors()
和getDeclaredConstructors()
、getMethods()和getDeclaredMethods()
,这两者分别表示获取某个类的方法、构造函数
按照上面的写法,如果我们的bean类如果是有继承的父类,并且我们一般写实体类的字段都是私有的,那么父类中的字段我们就拿不到
(2)、使用BeanMap
通过 net.sf.cglib.beans.BeanMap
类中的方法,这种方式效率极高,因为它使用了缓存,初次创建bean时需要初始化,之后就使用缓存,所以速度极快,经测试,循环bean和map的转换10000次,仅需要300毫秒左右
1 | private static <T> Map<String, Object> beanToMap(T bean) { |
以上。
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !