Access Data class property while using Generic Type parameter <T> in runtime [Kotlin]

139 Views Asked by At

I'm trying to return a property/value from Data class by checking type parameter

Data Class :

data class SystemConfiguration(
    val systemName: String,
    val fields: List<String>
)

Abstract class :

abstract class ConfigurationLoader<out T> {
    abstract val clazz: Class<out T>

    private fun getAssociateAttribute(file: T): String{
        return when(clazz){
            SystemConfiguration::class.java -> file.systemName // Line causing error
            // If its another Data class, I should return value from that data class
            else -> ""
        }
    }

    open fun loadConfigurations(): Map<String, T>{

        val map = Paths.get(configurationFolderPath, filePath).toFile().walkTopDown().filter { it.isFile }.map {
            val x = ionSystem.loader.load(it)[0]
            ionValueMapper.readValue<List<T>>(x.toString())
        }.flatten().associateBy { getAssociateAttribute(it) }
    }
}

inline fun <reified T: Any> javaClasstype(): Class<T> {
    return T::class.java
}

Sub class

class ServiceConfigurationLoader (
    override val clazz: Class<SystemConfiguration> = javaClasstype()

): ConfigurationLoader<SystemConfiguration>()

I'm getting an exception "e: Unresolved reference: systemName". Not able to access values inside data class while we use type parameter

If i use like this(directly mentioning data class name), I'm able to access the values

private fun getAssociateAttribute(file: SystemConfiguration): String{
        return when(clazz){
            SystemConfiguration::class.java -> file.systemName
            else -> ""
        }
    }

Could someone help me out here to access the value using Type paramater in Kotlin?

Thanks in Advance !!

I have tried using reified keyword as well. Still getting the same issue. I'm expecting to access the value using Type paramater

0

There are 0 best solutions below