How to create an instance of anonymous interface in Kotlin?

前端 未结 4 1159
北海茫月
北海茫月 2020-12-02 09:49

I have a third party Java library which an object with interface like this:

public interface Handler {
  void call(C context) throws Exception;
}
         


        
4条回答
  •  萌比男神i
    2020-12-02 10:20

    Assuming the interface has only a single method you can make use of SAM

    val handler = Handler { println("Hello: $it") }
    

    If you have a method that accepts a handler then you can even omit type arguments:

    fun acceptHandler(handler:Handler){}
    
    acceptHandler(Handler { println("Hello: $it") })
    
    acceptHandler({ println("Hello: $it") })
    
    acceptHandler { println("Hello: $it") }
    

    If the interface has more than one method the syntax is a bit more verbose:

    val handler = object: Handler2 {
        override fun call(context: String?) { println("Call: $context") }
        override fun run(context: String?) { println("Run: $context")  }
    }
    

提交回复
热议问题