Java 内省/反射复制 bean
我正在编写一个通用方法,它复制具有公共字段的两种不同类型的 bean。我正在使用内省来获取写入和读取方法,例如
propertyDescriptor1.getWriteMethod().invoke(bean1, propertyDescriptor2.getReadMethod().invoke(bean2) )
上面的方法对于字符串来说效果很好,但对于任何原始类型(例如 int、long...)却失败了。 有什么优雅的解决方案来复制两种不同类型的豆子吗?
编辑:它已经解决了,问题不在于原始类型,我没有检查 propertyDescriptor.getName() 是否不是“类”
I'm writing a common method which copies two different types of beans which have common fields. I'm using introspection to get the write and read methods, like
propertyDescriptor1.getWriteMethod().invoke(bean1, propertyDescriptor2.getReadMethod().invoke(bean2) )
The above works fine for Strings, but fails for any primitive types like int,long....
Any elegant solutions to copying two different types of beans?
Edit: It's solved, the problem was not with primitive types, I was not checking if the propertyDescriptor.getName() was not "class"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么不使用 Apache Commons BeanUtils。
它有一个非常有用的方法,称为
copyProperties
,如果它们共享相同的名称,它将属性从一个 bean 复制到另一个 bean。Why not use Apache Commons BeanUtils.
It has a very useful method called
copyProperties
which copies properties from one bean to another if they share the same name.您可以编写一个转换为字符串的函数以及一个从字符串转换为任何类型的函数。使用这两者的组合,您可以从几乎任何标量类型转换为任何其他类型。
如果您需要转换集合,那就有点困难,因为您可能需要转换内容。例如列表<整数>列出<双>
您需要转换的灵活性如何?
You can write a function which converts to a String and a function converts from a String to any type. Using a combination of these two you can convert from just about any scalar type to any other.
If you need to convert collections, that is a little harder because you may need to convert the contents. e.g. List<integer> to List<Double>
How flexible to do you need the conversion to be?
Dozer 是一个强大的 bean 映射器,可以处理嵌套 bean、集合和所有其他如果你自己动手,你会遇到的东西......如果你的豆子很复杂,可能值得检查一下。
Dozer is a powerful bean mapper that can cope with nested beans, collections, and all the other stuff you'll come across if you roll your own... might be worth checking out if your beans are complex.