我知道我可以做这样的事情:
interface ISpecialEnum{/*interace stuff*/}
fun <T> consumeSpecialEnum(enum: T)
where T:Enum<T>, T:ISpecialEnum{
//code
}
强制函数仅接受具有特定接口的枚举。
kotlin中是否有任何东西可以检查泛型是否扩展了数据类?喜欢:
interface ISpecialDataClass{/*interface stuff*/}
fun <T> consumeSpecialDataClass(dataClass: T)
where T:DataClass<T>, T:ISpecialDataClass{
//code
}
答案 0 :(得分:0)
您可以像这样检查类型T是否为数据类(并且它实现了您的接口):
fun <T> func(param : T) where T : ISpecialInterface {
if (param::class.isData) {
// do stuff
}
}
如果仅想检查它是否是数据类,则应删除“ where”子句,但是,为确保类型T不能为空,您需要将fun <T>
替换为{{1} },因为fun <T : Any>
默认为<T>
。
答案 1 :(得分:0)
与枚举相反,对于所有数据类都没有通用的超类型(不包括Any
,它是绝对所有kotlin类的通用超类型)。
因此,通常,此检查不能在编译时完成(但可以在运行时通过reflection API进行)。