假設KeyAdapter
是一個抽象類,其中有幾個可以被覆蓋的方法。如何在Kotlin中創建一個匿名類的抽象類的實例?
在java中我可以這樣做:
KeyListener keyListener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent keyEvent) {
// ...
}
};
如何做相同的科特林?
假設KeyAdapter
是一個抽象類,其中有幾個可以被覆蓋的方法。如何在Kotlin中創建一個匿名類的抽象類的實例?
在java中我可以這樣做:
KeyListener keyListener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent keyEvent) {
// ...
}
};
如何做相同的科特林?
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e : MouseEvent) {
// ...
}
手頭適用於您的問題:
val keyListener = object : KeyAdapter() {
override fun keyPressed(keyEvent : KeyEvent) {
// ...
}
正如彼得·拉門伯格指出 - 如果匿名類實際上是一個功能接口的實現( 即不是抽象類),SAM Conversions可以用來更簡化這個陳述:
val keyListener = KeyAdapter { keyEvent ->
// ...
}
另請注意this discussion有關在Java和Kotlin中定義的接口的不同用法。
其中'object'是一個關鍵字(在給定的鏈接處比在SO語法高亮處更明顯)。 – ataulm
謝謝你,沒有對象關鍵字它不工作。我能夠爲我的ViewPager創建我的'OnPageChangeListener'。 –
我沒有downvote,但你的問題顯示很少的研究工作。對kotlin_中的_anonymous類進行簡單的Google搜索就會出現[本頁](http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-1/),其中討論了所有內容 - 如何創建Kotlin類似於匿名的內部類。 –
我也剛剛開始與Kotlin。這個問題是谷歌搜索非常合理的第一次。對於我來說非常困惑的是,問題中的KeyAdapter很可能是java.awt.event.KeyAdapter,它是一個具有3個方法和簡單的'val k:KeyAdapter = KeyAdapter {「println(」Hello,世界!「) }'不會工作。 (但是我正在尋找lambda語法。)我想我會用這個確切的標題來尋找一個anoter問題,但是一個更好的公式化問題,並且將它與一個評論聯繫起來...... –
@PeterLamberg它不是java.awt它是Intellij插件API。 – Tvaroh