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

时间:2017-11-06 16:22:01

标签: kotlin

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

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

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()
}

你有更聪明的方法吗?

3 个答案:

答案 0 :(得分:5)

你可以做到

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

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

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

fun testMethod(inst: Base) = inst.method()

答案 1 :(得分:1)

fun test_method(inst){
    inst.method()
}

在您看来,什么可以帮助编译器派生inst的类型,并决定inst是否有.method()

我想你需要inst: Base在某处宣布推断工作。

答案 2 :(得分:1)

您的方法签名不正确,编译器没有机会知道参数的类型,在这种情况下没有推断:

fun test_method(inst)

有必要这样声明:

fun test_method(inst: Base)