2013-07-07 46 views
46

假設KeyAdapter是一個抽象類,其中有幾個可以被覆蓋的方法。如何在Kotlin中創建一個匿名類的抽象類的實例?

在java中我可以這樣做:

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

如何做相同的科特林?

+0

我沒有downvote,但你的問題顯示很少的研究工作。對kotlin_中的_anonymous類進行簡單的Google搜索就會出現[本頁](http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-1/),其​​中討論了所有內容 - 如何創建Kotlin類似於匿名的內部類。 –

+0

我也剛剛開始與Kotlin。這個問題是谷歌搜索非常合理的第一次。對於我來說非常困惑的是,問題中的KeyAdapter很可能是java.awt.event.KeyAdapter,它是一個具有3個方法和簡單的'val k:KeyAdapter = KeyAdapter {「println(」Hello,世界!「) }'不會工作。 (但是我正在尋找lambda語法。)我想我會用這個確切的標題來尋找一個anoter問題,但是一個更好的公式化問題,並且將它與一個評論聯繫起來...... –

+0

@PeterLamberg它不是java.awt它是Intellij插件API。 – Tvaroh

回答

88

the first hit on Google

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中定義的接口的不同用法。

+1

其中'object'是一個關鍵字(在給定的鏈接處比在SO語法高亮處更明顯)。 – ataulm

+0

謝謝你,沒有對象關鍵字它不工作。我能夠爲我的ViewPager創建我的'OnPageChangeListener'。 –

相關問題