Как указать массив различных типов в Kotlin?

#kotlin #stored-procedures

#kotlin #хранимые процедуры

Вопрос:

У меня есть эта функция, проблема в том, что, имея тип any, все методы (setString, SetInt, …) Я получаю сообщение об ошибке: (

 fun execStoredProcedure(storedProcedure: String, params: Array<Any>?) : ResultSet? {
     try {
        val procedure: CallableStatement = this.getConnection().prepareCall(storedProcedure)

         if ( params != null ) {
             for ( (index,param) in params.withIndex() ){
                 when( param::class.simpleName ){
                     "String" -> procedure.setString(index 1,param)
                     "Int"    -> procedure.setInt(index 1,param)
                     "Double" -> procedure.setDouble(index 1,param)
                     "Date"   -> procedure.setDate(index 1,param)
                 }
             }
         }

        return procedure.executeQuery()

    }catch (e:Error){
        println("Error in storedProcedure: ${e.message}")
        return null
    }
}
 
 O si alguien sabe una funcion para poder ejecutar cualquier stored procedure en Kotlin, mi profesor no enseña nada :( 
 

Ответ №1:

Если вы измените свое when предложение на сравнение классов, а String не на сравнение имен, вы можете воспользоваться интеллектуальным приведением, и это должно сработать (непроверено):

 when(param) {
    is String -> procedure.setString(index 1,param)
    is Int   -> procedure.setInt(index 1,param)
    is Double -> procedure.setDouble(index 1,param)
    is Date   -> procedure.setDate(index 1,param)
}