Skip to content
This repository was archived by the owner on Jan 20, 2023. It is now read-only.

Commit dd013cc

Browse files
committed
マッピングをラムダ経由で行うことで、初期化時点でマップ方法が決まるように修正
1 parent 3dbfd44 commit dd013cc

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

src/main/kotlin/com/mapk/krowmapper/ParameterForMap.kt

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,34 @@ import kotlin.reflect.jvm.jvmName
1717

1818
class ParameterForMap private constructor(
1919
val param: KParameter,
20-
private val name: String,
20+
name: String,
2121
parameterKClazz: KClass<*>
2222
) {
23-
private val javaClazz: Class<*> = parameterKClazz.java
24-
private val deserializer: KFunction<*>?
23+
private val objectGetter: (ResultSet) -> Any?
2524

2625
init {
27-
deserializer = parameterKClazz.getDeserializer()
28-
}
26+
val deserializer = parameterKClazz.getDeserializer()
27+
28+
objectGetter = if (deserializer != null) {
29+
val targetClass = deserializer.parameters.single().type.classifier as KClass<*>
2930

30-
fun getObject(rs: ResultSet): Any? = when {
31-
javaClazz.isEnum -> EnumMapper.getEnum(javaClazz, rs.getString(name))
32-
else -> {
33-
val value: Any? = rs.getObject(name, javaClazz)
34-
deserializer?.call(value) ?: value
31+
{
32+
deserializer.call(it.getObject(name, targetClass.java))
33+
}
34+
} else {
35+
{
36+
val clazz = parameterKClazz.java
37+
38+
when {
39+
clazz.isEnum -> EnumMapper.getEnum(clazz, it.getString(name))
40+
else -> it.getObject(name, clazz)
41+
}
42+
}
3543
}
3644
}
3745

46+
fun getObject(rs: ResultSet): Any? = objectGetter(rs)
47+
3848
companion object {
3949
fun newInstance(param: KParameter, propertyNameConverter: (String) -> String = { it }): ParameterForMap {
4050
return ParameterForMap(

0 commit comments

Comments
 (0)