bsa*_*sam 0 mapping type-conversion orika
我试图了解Orika何时使用转换器进行映射而不是直接转换。
我有以下映射:
Class A {
Map<String, Object> props;
}
Class B {
String bStr;
int bInt;
}
Run Code Online (Sandbox Code Playgroud)
我的映射定义为props ['aStr'] => bStr和props ['aInt'] => bInt
当查看生成的代码时,我发现对于String情况,它使用一个转换器并调用其convert方法进行转换:
destination.setBStr("" + ((ma.glasnost.orika.Converter)usedConverters[0]).convert(
((java.lang.Object) ((java.util.Map) source.getProps().get("aStr"),
(ma.glasnost.orika.metadata.Type) usedTypes[0]))
Run Code Online (Sandbox Code Playgroud)
但是,对于整数情况,它将直接像这样进行转换:
destination.setBInt((java.lang.Integer)(java.lang.Object) ((java.util.Map)
source.getProps().get("aInt")))
Run Code Online (Sandbox Code Playgroud)
上面的代码行最终给了类强制转换异常。
为了解决此问题,我一直在考虑使用自定义转换器,但是如果上面的代码行不使用转换器,那将无法正常工作。
当然,我总是可以在我的自定义映射器中执行此操作,但是只是试图了解如何为类型转换生成代码。
谢谢!!
在Orika中,有两个阶段:配置时间和运行时,因为优化Orika在配置时间内解析了所有使用的转换器,并将它们缓存到每个生成的映射器中,因此可以直接访问O(1),但是在配置时间内它将尝试为了在已注册的转换器的列表O(n)中找到两个给定类型之间的一个“ canConvert”,canConvert是Converter接口中的一种方法。
因此,此解决方案提供了两个方面的优势:
默认情况下,Orika利用每个对象中.toString的存在为每个对象提供对String的隐式强制。这里的问题是没有从对象到整数的转换器。
也许这可能是错误报告的问题。理想情况下,Orika应该报告对象必须转换为Integer,并且没有注册适当的转换器。
| 归档时间: |
|
| 查看次数: |
4023 次 |
| 最近记录: |