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.

Version 0.0.7 of ShapeShift introduced new Object Suppliers functionality as an improved solution for the no arg constructor issue.

@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