接口上的Kotlin扩展

Alg*_*gar 9 android kotlin

假设我有一个interface Base并且我们实现了该接口class Base1 : Base.

我希望表单中有一个扩展函数

fun ArrayList<Base>.myFun()
Run Code Online (Sandbox Code Playgroud)

也工作arrayListOf(Base1(), Base1()).myFun(),但它没有.它要求列表Base不是类型Base1.

这不是很奇怪吗?或者我只是错过了什么?

而且,我可以选择在接口的所有子类上编写一个函数吗?

谢谢!

ruX*_*ruX 8

您需要允许扩展功能接受子实现

interface Base
class Base1: Base

fun ArrayList<out Base>.myFun() = println(toString())

fun main(args: Array<String>) {
    arrayListOf(Base1(), Base1()).myFun()

}
Run Code Online (Sandbox Code Playgroud)