Mam bibliotekę Java innej firmy, która jest obiektem z takim interfejsem:
public interface Handler<C> {
void call(C context) throws Exception;
}
Jak mogę zwięźle zaimplementować to w Kotlin, podobnie jak anonimowa klasa Java, taka jak ta:
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"
acceptHandler { println("Hello: $it")}
działałby również w większości przypadkówfun interface
.Miałem przypadek, w którym nie chciałem tworzyć dla niego zmiennej, ale robiłem to w tekście. Sposób, w jaki to osiągnąłem, jest
funA(object: InterfaceListener { override fun OnMethod1() {} override fun OnMethod2() {} })
źródło
val obj = object : MyInterface { override fun function1(arg:Int) { ... } override fun function12(arg:Int,arg:Int) { ... } }
źródło
Najprostszą odpowiedzią jest prawdopodobnie lambda Kotlina:
val handler = Handler<MyContext> { println("Hello world") } handler.call(myContext) // Prints "Hello world"
źródło