没有types注释的Kotlin函数参数
在Kotlin上,当定义方法时,函数的参数需要types注释。
在我的情况下,我有一个接口的两个类。
interface Base{ fun method() } class DervA():Base{ fun override method(){ ... } } class DervB():Base{ fun override method(){ ... } }
而且,我希望从其他函数调用他们的方法
fun test_method(inst){ inst.method() }
但是,Kotlin编译器却抱怨:“一个值参数需要一个types注解”。
我应该为每个类定义“test_method”吗?
fun test_method_for_DervA(inst:DervA){ inst.method() } fun test_method_for_DervB(inst:DervB){ inst.method() }
你有更聪明的方法吗?
你可以做
fun testMethod(inst: Base) { inst.method() }
由于DervA
和DervB
都是Base
,所以它们也可以传递给testMethod
,它们的重写method
将被调用。 这是面向对象的基本原理之一。
请注意,如果method
和testMethod
具有相同的返回types,则可以将其缩短为
fun testMethod(inst: Base) = inst.method()
fun test_method(inst){ inst.method() }
在你看来,什么可以帮助编译器派生inst
的types,并决定inst
甚至是否具有.method()
?
我想你需要inst: Base
宣布的地方推断工作。
你的方法签名是不正确的,编译器没有机会知道参数的types,在这种情况下没有推论:
fun test_method(inst)
有必要这样声明:
fun test_method(inst: Base)