How to create an instance of anonymous class of abstract class in Kotlin? How to create an instance of anonymous class of abstract class in Kotlin? java java

How to create an instance of anonymous class of abstract class in Kotlin?


From the official Kotlin language documentation:

window.addMouseListener(object : MouseAdapter() {     override fun mouseClicked(e : MouseEvent) {     // ... }

Applied to your problem at hand:

val keyListener = object : KeyAdapter() {     override fun keyPressed(keyEvent : KeyEvent) {     // ... } 

As Peter Lamberg has pointed out - if the anonymous class is actually an implementation of a functional interface (i.e. not of an abstract class), SAM Conversions can be used to simplify this statement even further:

val keyListener = KeyAdapter { keyEvent ->    // ...}

Please also note this discussion about the different usage of interfaces defined in Java and Kotlin.


In Java

private Comparator<Integer> comparator = new Comparator<Integer>(){    @Override    public int compare(Integer o1, Integer o2) {        return o1.compareTo(o2);    }};

in Kotlin

private val comparator = object: Comparator<Int> {    override fun compare(o1: Int, o2: Int): Int {        return o1.compareTo(o2)    }}

But because Comparator is a FunctionalInterface we can take advantage of SAM conversions and write

private val comparator = Comparator<Int> { o1, o2 -> o1.compareTo(o2) }

Please note that SAM feature only works for Functional interfaces defined in java, if you need to create object of a kotlin interface with single method then you will have to use object syntax.