如果我只对onSee
感兴趣,而不关心其他事件,我至少可以忽略那些没有返回值的方法吗?
interface EventHandler
{
fun onSee()
fun onHear()
fun onSmell()
fun onTouch()
fun onAwake()
fun onSleep()
}
fun addEventHandler(handler:EventHandler)
{
}
fun Main()
{
addEventHandler(object:EventHandler
{
override fun onSee()
{
print("I see.")
}
})
}
2条答案
按热度按时间5ssjco0h1#
当然,这是可能的!您可以在扩展一个接口方法时实现它,您所要做的就是为接口声明中的其他方法提供一个默认实现。
现在,当您创建此接口的示例时,只需提供
onSee()
方法的强制实现,其余都是可选的如果您不是原始界面的作者您可以扩充原始界面,并提供所需方法的预设实作
并使用
OnSeeEventHandler
来提供仅onSee
方法的实现。knpiaxh12#
我想出了以下有趣的方法。
下面的函数使用一个dynamic proxy来“具体化”一个接口,并且只使用所需的方法来修补它。未被修补的方法将只返回
null
或Unit
,这取决于返回类型。给定一个接口
Foo
和一个只包含其qux()
函数的实现的匿名对象,它可以按如下方式使用:免责声明
kotlin-reflect
相依性。在大多数情况下,我自己不会使用这种方法,我将继续支持支持部分接口实现的Kotlin构造(如TypeScript的
Partial<T>
)。我之所以提供这种方法,是因为它可能对某些用例感兴趣,如果这让您感到意外,我很抱歉。