@@ -19,40 +19,33 @@ import kotlin.reflect.full.staticFunctions
1919import kotlin.reflect.jvm.isAccessible
2020import kotlin.reflect.jvm.jvmName
2121
22- internal sealed class ParameterForMap {
22+ internal sealed class ParameterForMap < S , D > {
2323 abstract val name: String
24- abstract val clazz: Class <* >
25- abstract fun getObject (rs : ResultSet ): Any?
24+ abstract fun getObject (rs : ResultSet ): D ?
2625
27- private class Plain (
28- override val name : String ,
29- override val clazz : Class <* >
30- ) : ParameterForMap() {
31- override fun getObject (rs : ResultSet ): Any? = rs.getObject(name, clazz)
26+ private class Plain <T >(override val name : String , val requiredClazz : Class <T >) : ParameterForMap<T, T>() {
27+ override fun getObject (rs : ResultSet ): T ? = rs.getObject(name, requiredClazz)
3228 }
3329
34- private class Enum (
35- override val name : String ,
36- override val clazz : Class <* >
37- ) : ParameterForMap() {
38- override fun getObject (rs : ResultSet ): Any? = EnumMapper .getEnum(clazz, rs.getString(name))
30+ private class Enum <D >(override val name : String , val enumClazz : Class <D >) : ParameterForMap<String, D>() {
31+ override fun getObject (rs : ResultSet ): D ? = EnumMapper .getEnum(enumClazz, rs.getString(name))
3932 }
4033
41- private class Deserializer (
34+ private class Deserializer < S : Any , D > (
4235 override val name : String ,
43- override val clazz : Class <* >,
44- private val deserializer : KFunction <* >
45- ) : ParameterForMap() {
36+ val srcClazz : Class <S >,
37+ private val deserializer : KFunction <D ? >
38+ ) : ParameterForMap<S, D> () {
4639 constructor (
4740 name: String ,
48- deserializer: AbstractKColumnDeserializer <* , * , * >
41+ deserializer: AbstractKColumnDeserializer <* , S , D >
4942 ) : this (name, deserializer.srcClass, deserializer::deserialize)
5043
51- override fun getObject (rs : ResultSet ): Any ? = deserializer.call(rs.getObject(name, clazz ))
44+ override fun getObject (rs : ResultSet ): D ? = deserializer.call(rs.getObject(name, srcClazz ))
5245 }
5346
5447 companion object {
55- fun <T : Any > newInstance (param : ValueParameter <T >): ParameterForMap {
48+ fun <T : Any > newInstance (param : ValueParameter <T >): ParameterForMap < * , T > {
5649 param.getDeserializer()?.let {
5750 return Deserializer (param.name, it)
5851 }
@@ -117,5 +110,5 @@ private fun <T : Any> deserializerFromCompanionObject(clazz: KClass<T>): Collect
117110 functions.map {
118111 KFunctionWithInstance (it, instance) as KFunction <T >
119112 }
120- } ? : emptySet ()
113+ } ? : emptyList ()
121114}
0 commit comments