如何使重写单一表达式函数的返回类型为Unit?

如何重写一个返回voidUnit的函数,用一个表达式返回一些非Unit类型的单表达式函数 ? 例如:

 interface Base { fun overrideMe(): Unit } class Derived: Base { override fun overrideMe() = runAsync { } } 

经过思考,我发现最好的方法是在顶层使用let覆盖单表达式函数来返回一个Unit ,然后根本不需要else子句 ,例如:

 class Derived : Base { // v--- uses `let` here override fun overrideMe()=let{if (Math.random() < 0.5) runAsync { /*TODO*/ }} } 

或者使用let in if表达式,例如:

 class Derived : Base { // use let to return Unit explicitly , but I think T.let{Unit} is more clearly // and the Unit is optional you can do it as T.let{} simply ---v override fun overrideMe() = if (Math.random() < 0.5) runAsync { }.let { Unit } else Unit } 

OR最后的声明如下:

 class Derived : Base { // return Unit explicitly ---v override fun overrideMe() = if (Math.random() < 0.5){ runAsync { }; Unit } else Unit } 

你可以使用kotlin-stdlib中的一个函数来创建任何表达式的Unit

  • override fun foo() = someExpression.let { }

  • override fun foo() = Unit.apply { someExpression }

或者以任何方式编写你自己的扩展程序fun Any.toUnit(): Unit = ...然后使用它。