reflection - Kotlin 父类(super class) Kclass

标签 reflection kotlin

我有功能的定义

abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable 

我需要得到KClass来自类型 T .在 Kotlin 有可能吗?

最佳答案

由于 type erasure,这无法完成.但是您可以提供带有 reified type 的工厂方法委托(delegate)给接受 KClass 的构造函数.这是一个简化的示例:

class WithReifiedType<T> constructor(val kc: KClass<*>) {
    companion object {
        inline fun <reified T> getInstance(): WithReifiedType<T> {
            println("Here's your KClass: ${T::class}")
            return WithReifiedType(T::class)
        }
    }
}

//called like this
WithReifiedType.getInstance<String>()

在调用者站点上创建一个看起来像构造函数的顶级函数(作为同伴嵌入式工厂的替代方案)也是可以接受的。
inline fun <reified T> WithReifiedType(): WithReifiedType<T> {
    println("Here's your KClass: ${T::class}")
    return WithReifiedType(T::class)
}

//called like this
WithReifiedType<String>()

关于reflection - Kotlin 父类(super class) Kclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48035181/

相关文章:

java - 如何使用泛型类中的类类型对象作为参数? - 泛型和反射相结合

kotlin - 使用可见性修饰符覆盖接口(interface)成员函数的正确语法是什么?

kotlin - 当条件满足时,如何在when block 中执行多个代码?

json - 为什么 Kotlin Object 类到 json 对象为 null?

java - 如何记录 Glide 的每个请求 url?

java - 为什么 Sun 更喜欢 NoSuchMethodError + NullPointerException 而不是类检查?

java - 调用 Method.invoke 时获取 java.lang.NullPointerException

c# - 是否可以在隔离环境中执行上传的.NET 代码?

Java 反射 : Code runs fine in Debugger but not in "normal" running mode

spring - 如何检查 Mono 是否为空?