2017-11-18 104 views
4

如果我只对onSee感兴趣而不在乎其他事件怎么办?我可以至少省略没有返回值的方法吗?我可以省略我在Kotlin中不使用的界面方法吗?

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.") 
     } 
    }) 
} 

回答

6

当然,你可以只实现一个接口的方法,所有你需要做的就是当你创建一个这样的实例在接口声明的其他方法提供一个默认的实现现在

interface EventHandler { 
    fun onSee() 
    fun onHear() { // default implementation} 
    fun onSmell(){ // default implementation} 
    fun onTouch(){ // default implementation} 
    fun onAwake(){ // default implementation} 
    fun onSleep(){ // default implementation} 
} 

接口你只需要为onSee()方法提供了强制执行,其余可选

如果你没有原稿的作者伊纳勒接口 你可以扩展原有的接口,并提供了方法的默认实现你想要

interface OnSeeEventHandler: EventHandler { 
    override fun onHear() { // default implementation} 
    override fun onSmell(){ // default implementation} 
    override fun onTouch(){ // default implementation} 
    override fun onAwake(){ // default implementation} 
    override fun onSleep(){ // default implementation} 
} 

,并使用OnSeeEventHandler只提供onSee方法imeplementation

+0

谢谢。我不知道这件事。如果我是界面的作者,这将会很有用。但是当使用现有的Android/Java SDK时,它不能使用,可以吗? –

+1

@DamnVegetables在这种情况下,通过DefaultEventHandler(){...}'写一个默认实现'class DefaultEventHandler:EventHandler {...}'并委托给它'object:EventHandler。 – ephemient

+0

@DamnVegetables我编辑了我的答案以满足您的顾虑。 –

相关问题