2017-11-18 45 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我編輯了我的答案以滿足您的顧慮。 –

相關問題