访问外部类型的类型参数

在Kotlin中,我们可以定义嵌套的接口。 如果外部接口是通用的(这里只是为了模拟一个适当的Self类型,但可以想象其他用途),我可以从内部类型引用它的类型参数吗?

也就是说,我想达到(相当于)这个:

 interface JsonRepresentable<Self: JsonRepresentable<Self>> { fun toJson(): String interface Companion { operator fun invoke(json:String): Self? } } 

One Solution collect form web for “访问外部类型的类型参数”

不,你不能。 一个接口不能是一个非静态的内部类,这是一个Kotlin无法克服的平台约束。 我知道限制伴随对象应该是非常有用的,但是这还没有被考虑。 我不知道JetBrains是否会严肃对待这个建议。

在你的尝试中,除了可以在JsonRepresentable::class.nestedClasses找到KClass<Compaion>之外,这两个接口是完全不相关的。 这些接口之间的关系可以与Java静态内部类和它的声明类之间的关系进行比较。

  • 如何从Kotlin函数类型返回
  • kotlin:扩展方法和null接收者
  • 如何在values / ids.xml中获得自定义ID的引用
  • 如何从Kotlin代码中调用外部命令?
  • 在@Service中使用Kotlin的Spring Boot @Autowired始终为空
  • 点击一个文本视图来改变片段
  • 使用默认参数键入Kotlin函数的签名
  • 尝试在将kotlin数据类作为文档保存到Google Cloud Firestore时排除字段
  • 不使用Intelli-J Ultimate的Kotlin Web编程?
  • 在Kotlin中使用辅助构造函数的子类RelativeLayout
  • Anko布局 - 区别布局applyRecursively
  • Kotlin language will be the best programming language for Android.