首页 文章

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

提问于
浏览
2

在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 回答

  • 1

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

    fun test_method(inst)
    

    有必要这样声明:

    fun test_method(inst: Base)
    
  • 5
    fun test_method(inst){
        inst.method()
    }
    

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

    我想你需要 inst: Base 声明某处推断工作 .

  • 1

    你可以这样做

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

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


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

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

相关问题