Я пытаюсь понять, когда Orika использует конвертеры для отображения по сравнению с прямым литьем.
У меня есть следующее сопоставление:
Class A {
Map<String, Object> props;
}
Class B {
String bStr;
int bInt;
}
Мое отображение определяется как 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]))
Но для целочисленного случая он прямо бросает это так:
destination.setBInt((java.lang.Integer)(java.lang.Object) ((java.util.Map)
source.getProps().get("aInt")))
Приведенная выше строка кода приводит к исключению приведения класса.
Чтобы решить эту проблему, я думал об использовании специального конвертера, но если в приведенной выше строке кода конвертер не используется, это не сработает.
Конечно, я всегда могу сделать это в своем собственном картографе, но просто пытаюсь понять, как генерируется код для преобразования типов.
Спасибо!!