Instance Mapping
Mapping to destination classes without a no arg constructor.
Due to the fact that ShapeShift uses reflection behind the scenes, destination classes need a no arg constructor. But in some cases you have no control over the destination classes and cannot modify them to add a no arg constructor. This is where Instance Mapping comes into play, you can pass already-instantiated destination objects to the map
method.
@DefaultMappingTarget(SimpleEntityDisplay::class)
data class SimpleEntity(
@MappedField
val name: String,
@MappedField
val description: String,
val privateData: String
)
data class SimpleEntityDisplay(
val name: String,
val description: String
)
SimpleEntityDisplay
does not have a no arg constructor. You can either add a no arg constructor or initiate a new instance of SimpleEntityDisplay
and pass it to the map
function.
val shapeShift = ShapeShiftBuilder().build()
val simpleEntity = SimpleEntity("test", "test description", "private data")
val simpleEntityDisplay = SimpleEntityDisplay("", "")
// Passing simpleEntityDisplay as a destination instance
val result = shapeShift.map(simpleEntity, simpleEntityDisplay)
Last updated
Was this helpful?