2013-07-07 2 views
46

KeyAdapter은 오버라이드 할 수있는 여러 가지 메소드가있는 추상 클래스라고 가정합니다. 나는 자바에서Kotlin에서 추상 클래스의 익명 클래스 인스턴스를 만드는 방법은 무엇입니까?

을 수행 할 수 있습니다

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

어떻게 코 틀린에 동일한 기능을 수행 할? 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 k : KeyAdapter = KeyAdapter { println ("Hello, 세상! ") }'실례합니다. (그러나 나는 람다 문법을 찾고 있었다.) 나는이 정확한 제목으로 anoter 질문을 찾을 것이지만, 더 좋은 공식화 된 질문을하고 이것에 주석으로 연결시켜 줄 것이라고 생각한다. ... –

+0

@PeterLamberg 그것은 java.awt가 아니다. 그것은 Intellij 플러그인 API입니다. – Tvaroh

답변

88

:

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

손에 당신의 문제에 적용 :

피터 Lamberg가 지적했듯이
val keyListener = object : KeyAdapter() { 
    override fun keyPressed(keyEvent : KeyEvent) { 
    // ... 
} 

- 익명 클래스는 기능적인 인터페이스의 구현이 (실제로는 경우 즉, 추상 클래스가 아님), SAM Conversions을 사용하면이 문장을 더욱 단순하게 만들 수 있습니다.

Java 및 코 틀린에 정의 된 인터페이스의 다양한 사용에 대한 6,
val keyListener = KeyAdapter { keyEvent -> 
    // ... 
} 

도 있습니다 this discussion.

+1

여기서'object'는 키워드입니다 (SO 구문 강조 표시보다 주어진 링크에서 더 분명합니다). – ataulm

+0

개체 키워드가 작동하지 않아서 고맙습니다. 내 ViewPager에 대한'OnPageChangeListener'를 만들 수있었습니다. –