Tva*_*roh 93 java abstract-class kotlin
假设这KeyAdapter是一个抽象类,有几个可以覆盖的方法.
在java中我可以做到:
KeyListener keyListener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent keyEvent) {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
如何在Kotlin做同样的事情?
Mic*_*ang 155
从官方的Kotlin语言文档和Google上的首批点击之一:
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e : MouseEvent) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
适用于您手头的问题:
val keyListener = object : KeyAdapter() {
override fun keyPressed(keyEvent : KeyEvent) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如Peter Lamberg指出的那样 - 如果匿名类实际上是功能接口的实现(即不是抽象类),SAM转换可用于进一步简化此语句:
val keyListener = KeyAdapter { keyEvent ->
// ...
}
Run Code Online (Sandbox Code Playgroud)
另请注意有关Java和Kotlin中定义的接口的不同用法的讨论.
mig*_*WOZ 12
private Comparator<Integer> comparator = new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
Run Code Online (Sandbox Code Playgroud)
private val comparator = object: Comparator<Int> {
override fun compare(o1: Int, o2: Int): Int {
return o1.compareTo(o2)
}
}
Run Code Online (Sandbox Code Playgroud)
但因为Comparator是一个FunctionalInterface,我们可以利用SAM 转换并编写
private val comparator = Comparator<Int> { o1, o2 -> o1.compareTo(o2) }
Run Code Online (Sandbox Code Playgroud)
请注意,SAM 功能仅适用于Functionaljava 中定义的接口,如果您需要使用单一方法创建objectkotlin interface,则必须使用object语法。