在嵌套接口中使用Kotlin泛型的问题
在嵌套接口中使用Kotlin泛型的问题
嗨,我来帮你搞定这个泛型嵌套的问题~你遇到的「未解析引用」报错,本质是因为Kotlin里的嵌套接口默认是静态的,没法直接“继承”外层接口的泛型参数T,所以编译器根本找不到这个T的定义。用*通配符虽然能混过编译,但会丢失具体的类型信息,监听器里拿到的events会变成模糊的List<Any?>,完全不符合你要的类型匹配需求。
咱们直接给嵌套的Response接口也加上对应的泛型参数,和外层Sender的T保持一致就可以解决问题了,修改后的代码如下:
interface Sender<T> { // 让Response也声明泛型T,和外层Sender的泛型关联起来 interface Response<T> { val success: Boolean val events: List<T> } // 举个例子,发送方法返回对应类型的Response fun sendEvents(events: List<T>): Response<T> }
这样一来,当你实现Sender<String>这类具体的泛型实现时,对应的Response会自动变成Response<String>,events的类型就是List<String>,完美匹配监听器里需要的类型——既保证了类型安全,又能准确传递泛型信息。
简单说下原理:嵌套接口是静态的,它不依赖外层Sender的实例,所以必须自己声明泛型参数才能使用T,不然编译器根本不知道你指的是哪个类型,自然会报错啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

