没有类型注释的Kotlin函数参数

ric*_*ric 3 kotlin

在Kotlin上,功能参数在定义方法时需要使用thire类型注释.

就我而言,我有两个来自界面的类.

interface Base{
    fun method()
}

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

class DervB():Base{
    fun override method(){
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

并且,我希望从其他函数调用他们的方法

fun test_method(inst){
    inst.method()
}
Run Code Online (Sandbox Code Playgroud)

但是,Kotlin编译器抱怨"值参数需要类型注释".

我应该为每个类定义"test_method"吗?

fun test_method_for_DervA(inst:DervA){
    inst.method()
}

fun test_method_for_DervB(inst:DervB){
    inst.method()
}
Run Code Online (Sandbox Code Playgroud)

你有更聪明的方法吗?

Ruc*_*oom 6

你可以这样做

fun testMethod(inst: Base) {
    inst.method()
}
Run Code Online (Sandbox Code Playgroud)

由于这两个DervADervBBaseS,它们也可以被传递到testMethod他们重写method将被调用.这是OOP的基本原则之一.


请注意,如果method并且testMethod具有相同的返回类型,则可以将其缩短为

fun testMethod(inst: Base) = inst.method()
Run Code Online (Sandbox Code Playgroud)