使用参数化函数实现接口
假设我有一个接口
interface A { fun calculate(n: Int): Int }
我想在类B
实现A
(比如说),以便在B
的构造函数中提供calculation
,如下所示:
class B (f : (Int) -> Int) : A { override fun calculate(n: Int): Int //...somehow assign f to calculate }
这可以做到没有B
的财产吗?
嗯…这个作品:
interface A { val calculate: (n: Int) -> Int } class B(f: (Int) -> Int) : A { override val calculate = f }
有人可以在这里解释fun
和val
之间的语法差异吗? 我知道函数定义:fun vs val,但是想得到’语言级别’的理解。
实现这个最简单的方法是:
class B(val f : (Int) -> Int) : A { override fun calculate(n: Int): Int = f(n) }
是的,这可以做到没有B
的财产。 例如通过使用类委托到一个对象expression式 :
class B(f: (Int) -> Int) : A by object : A { override fun calculate(n: Int) = f(n) }
即便如此,一个private val
似乎更适合这个简单的例子。