2013-07-07 24 views
46

KeyAdapterがオーバーライド可能ないくつかのメソッドを持つ抽象クラスであるとします。私はJavaでKotlinで抽象クラスの匿名クラスのインスタンスを作成するには?

を行うことができます。

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

はどのようにKotlinで同じことを行うには? the first hit on Googleから

+0

私はdownvoteしませんでしたが、あなたの質問はほとんど研究努力を示していません。 kotlin_の_anonymousクラスのシンプルなGoogle検索では、[このページ](http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-1/)が表示されます。匿名の内部クラスに対するKotlinの類似体を作成します。 –

+0

私もKotlinから始めています。この質問は、非常に合理的なGoogle検索の最初のヒットとなります。私にとって非常に混乱していたのは、質問のKeyAdapterがjava.awt.event.KeyAdapterである可能性が最も高いということでした。これは、3つのメソッドと単純なvalクラスを持つ抽象クラスです:KeyAdapter = KeyAdapter { println( "Hello、世界! ") }'うまく動作しません。 (しかし、私はラムダ構文を探していました。)私はこの正確なタイトルでanoterの質問を探すだろうと思うが、より良い公式な質問とそれにコメントとこの1つをリンク... –

+0

@PeterLambergそれはjava.awtではないIntellijプラグインAPIです。 – Tvaroh

答えて

88

手であなたの問題に適用
window.addMouseListener(object : MouseAdapter() { 
    override fun mouseClicked(e : MouseEvent) { 
    // ... 
} 

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

ピーターLambergが指摘したように - 匿名クラスが実際に機能インタフェース(の実装である場合すなわち抽象クラスではない)、SAM Conversionsを使用すると、このステートメントをさらに簡素化できます。

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

また、JavaとKotlinで定義されているインタフェースの使用方法については、this discussionを参照してください。

+1

ここで、 'object'はキーワードです(SO構文の強調表示よりも指定されたリンクでより明白です)。 – ataulm

+0

ありがとう、オブジェクトキーワードなしで動作していなかった。私は私のViewPagerのために私の 'OnPageChangeListener'を作成することができました。 –

関連する問題