Assume that KeyAdapter is an abstract class with several methods that can be overridden.

In java I can do:

KeyListener keyListener = new KeyAdapter() {
    @Override public void keyPressed(KeyEvent keyEvent) {
        // ...
    }
};

How to do the same in Kotlin?

推荐答案

the official Kotlin language documentation开始:

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

适用于你手头的问题:

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

正如Peter Lamberg所指出的--如果匿名类实际上是功能接口(i.e. not of an abstract class)的实现,则可以使用SAM Conversions进一步简化此语句:

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

还请注意this discussion关于用Java和Kotlin定义的接口的不同用法.

Kotlin相关问答推荐

只能在元素区域中点击的Jetpack Compose列

如何访问方法引用的接收者?

如何进行基于lambda/谓词的两个列表的交集?

在调用父构造函数之前重写类属性

Kotlin中反射中Int到可空Double的隐式转换失败

在 map 中查找键与在 kotlin 中查找 firstOrNull

将 java Optional 转换为 Kotlin Arrow Option

在jetpack compose中将默认方向设置为横向?

如何在kotlin中使用协程每秒调用一个函数

为什么 android studio 不为所有安全参数生成代码?

Kotlin 顶级函数与对象函数

Android Studio 将 Java 转换为 Kotlin 错误无法推断此参数的类型

Jacoco在Gradle 7.0.2和Kotlin 1.5.10上失败

添加抽象的私有getter和公共setter的正确方法是什么?

TypeConverter()在Android的TypeConverter错误中具有私有访问权限

修改扩展函数中的this

如何启用spring security kotlin DSL?

kotlin中的全局可拓函数

@StringRes、@DrawableRes、@LayoutRes等android注释使用kotlin参数进行判断

Android studio 4.0 新更新版本说 Kotlin 与这个新版本不兼容