最近在写项目的时候遇到一个这样的一个需要:将JavaBean中非空属性转到一个Map中。stackoverflow出一个还算不错的回答,记录如下:
stackoverflow地址:https://stackoverflow.com/questions/8524011/java-reflection-how-can-i-get-the-all-getter-methods-of-a-java-class-and-invoke
最佳答案(大概意思的翻译):
不要用正则表达式,使用Introspector:
|
|
通常情况下,我们不需要Object.class的属性,所以我们可以使用以下方法:
|
|
我们还可以使用commons/beanutils的一些方法,如:Map<String, String> properties = BeanUtils.describe(yourObject);
它会找到并执行所有的getter并将结果存储到Map中,而且BeanUtils.describe()在返回之前将所有的属性值转换为字符串。
以下是一个用Java 8写的方法:
|
|
以上方法有一个缺点:Collectors.toMap()对于null的值会报错。所以,有了以下版本:
|
|
Guava版本:
|
|
另外,还有一个JavaSlang的版本。基本上很少用这个,就不收集了。