2016-06-07 20 views
13

Bir üçüncü taraf Java kütüphanesi sahip bu gibi arayüzü ile bir nesne:Kotlin'de anonim arabirim örneği nasıl oluşturulur?

Handler<MyContext> handler = new Handler<MyContext> { 
    @Override 
    public void call(MyContext context) throws Exception { 
     System.out.println("Hello world"); 
    } 
} 

handler.call(myContext) // Prints "Hello world" 

cevap

22

sadece tek bir yöntemyararlanabilirler etmiştir arayüzü varsayarsak: muhtemelen KOTLIN en lambdadır

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

Eğer bile tip argümanları atlayabilirsiniz sonra bir işleyici kabul eden bir yöntem varsa: arayüzü birden fazla yöntemi vardır

fun acceptHandler(handler:Handler<String>){} 

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

acceptHandler({ println("Hello: $it")}) 

acceptHandler { println("Hello: $it")} 

Eğer söz dizimi biraz daha ayrıntılı geçerli:

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

'acceptHandler {println (" Merhaba: $ it ")}' çoğu durumda da çalışır – voddan

2

basit cevap: Ben kısaca şöyle Java anonim sınıfına benzer KOTLIN bunu uygulayabilirsiniz nasıl

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

val handler = Handler<MyContext> { 
    println("Hello world") 
} 

handler.call(myContext) // Prints "Hello world"