在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()
}
你有更聪明的方法吗?
答案 0 :(得分:5)
你可以做到
fun testMethod(inst: Base) {
inst.method()
}
由于DervA
和DervB
都是Base
,因此也可以将它们传递给testMethod
,并调用它们被覆盖的method
。这是OOP的基本原则之一。
请注意,如果method
和testMethod
具有相同的返回类型,则可以将其缩短为
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)