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

由于DervADervB都是Base ,所以它们也可以传递给testMethod ,它们的重写method将被调用。 这是面向对象的基本原理之一。


请注意,如果methodtestMethod具有相同的返回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)