在Kotlin上,定义方法时,函数的参数需要其类型注释。

就我而言,我从一个接口(interface)有两个类。

interface Base{
    fun method()
}

class DervA():Base{
    fun override method(){
        ...
    }
}

class DervB():Base{
    fun override method(){
        ...
    }
}

而且,我希望从其他函数中调用它们的方法,例如
fun test_method(inst){
    inst.method()
}

但是,Kotlin编译器提示“在值参数上需要类型注释”。

我应该为每个类定义“test_method”吗?
fun test_method_for_DervA(inst:DervA){
    inst.method()
}

fun test_method_for_DervB(inst:DervB){
    inst.method()
}

您有更聪明的方法吗?

最佳答案

你可以做

fun testMethod(inst: Base) {
    inst.method()
}

由于DervADervB均为Base,因此它们也可以传递给testMethod,并将调用其覆盖的method。这是OOP的基本原则之一。

请注意,如果methodtestMethod具有相同的返回类型,则可以将其缩短为
fun testMethod(inst: Base) = inst.method()

关于没有类型注释的Kotlin函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47141388/

10-12 16:35