在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 回答
您的方法签名不正确,编译器没有机会知道参数的类型,在这种情况下没有可用的推断:
有必要这样声明:
在您看来,什么可以帮助编译器派生
inst
的类型并决定inst
是否有.method()
?我想你需要
inst: Base
声明某处推断工作 .你可以这样做
由于
DervA
和DervB
都是Base
,因此它们也可以传递给testMethod
,并且将调用它们被覆盖的method
. 这是OOP的基本原则之一 .请注意,如果
method
和testMethod
具有相同的返回类型,则可以将其缩短为