0

I'm using Kotlin Generics to write the records to MongoDB.
I followed the answer
I wrote below class:

import com.mongodb.ConnectionString
import com.mongodb.MongoClientSettings
import com.mongodb.connection.ConnectionPoolSettings
import kotlinx.coroutines.runBlocking
import org.litote.kmongo.reactivestreams.*
import org.litote.kmongo.coroutine.*
import java.io.Serializable
import java.util.concurrent.TimeUnit

class MongoManager<TDataClass: Serializable>(
    private val clazz: Class<TDataClass>
) {
    private val client: CoroutineClient = KMongo.createClient(
       MongoClientSettings.builder()
           .applyConnectionString(ConnectionString("mongodb://localhost:27017"))
           .applyToConnectionPoolSettings {
               ConnectionPoolSettings.builder().maxConnectionIdleTime(60000, TimeUnit.MILLISECONDS)
                   .minSize(5).maxSize(40)
           }
           .build()).coroutine
    private val database = client.getDatabase("local")
    private val bbMembershipData: CoroutineCollection<TDataClass>;

    init {
        bbMembershipData = getCollection(this.clazz)    //Throwing error: Cannot use 'T' as reified type parameter. Use a class instead.
    }

    private fun <T: Serializable> getCollection(
        clazz: Class<T>
    ): CoroutineCollection<T> {
        return database.getCollection<T>()
    }

    fun write(
        data: TDataClass
    ) {
        runBlocking {
            bbMembershipData.insertOne(data)
        }
    }

    fun writeMany(
        data: List<TDataClass>
    ) {
        runBlocking {
            bbMembershipData.insertMany(data)
        }
    }
}

Not sure how to resolve the issue.

Satyam
  • 15,493
  • 31
  • 131
  • 244

1 Answers1

0

I cannot compile your code, but you probably need to use the Reified Type Parameter feature:

Here's a tutorial: https://typealias.com/guides/getting-real-with-reified-type-parameters/

i.e. change you function declaration to

private inline fun <reified T: Serializable> getCollection(
        ^^^^^^      ^^^^^^^
AndrewL
  • 2,034
  • 18
  • 18