@@ -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