Kotlin에서 추상 클래스의 익명 클래스 인스턴스를 만드는 방법은 무엇입니까?


114

KeyAdapter재정의 할 수있는 여러 메서드가있는 추상 클래스 라고 가정합니다 .

자바에서는 다음을 수행 할 수 있습니다.

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

Kotlin에서 동일한 작업을 수행하는 방법은 무엇입니까?


1
나는 반대표를 던지지 않았지만 귀하의 질문은 연구 노력이 거의 없음을 보여줍니다. kotlin의 익명 클래스에 대한 간단한 Google 검색 은 익명의 내부 클래스에 대한 Kotlin 아날로그를 만드는 방법을 설명 하는 이 페이지 를 표시합니다.
Ted Hopp 2013

5
저는 또한 Kotlin으로 시작했습니다. 이 질문은 매우 합리적인 Google 검색의 첫 번째 히트로 나타납니다. 저에게 매우 혼란스러운 점은 질문의 KeyAdapter가 java.awt.event.KeyAdapter 일 가능성이 가장 높으며, 이는 3 개의 메소드가있는 추상 클래스이고 간단한 val k: KeyAdapter = KeyAdapter { println("Hello, world!") }작동하지 않습니다. (하지만 람다 구문을 찾고있었습니다.)이 정확한 제목을 가진 anoter 질문을 찾고 더 나은 공식화 된 질문을 찾아서 주석과 연결합니다 ...
Peter Lamberg

@PeterLamberg는 java.awt가 아니라 Intellij 플러그인 API입니다.
Tvaroh

이 질문이있는 일부 구글 검색에서 첫 번째 히트로 온다 관련 질문은 가까운이에게 내가 여기 린킨 해요 그래서
피터 Lamberg

12
왜 이것이 너무 간단하다고 표시되는지 모르겠습니다. 이 질문은 많은 사람들이이 문제에 직면하고 있음을 의미합니다. 언어 차이로 인해 Google의 첫 번째 히트작이 해결책인지 확실하지 않습니다. 나는 공식 문서를 훑어 보았지만이 질문은 그것을 정리했습니다.
MUZ

답변:


178

에서 공식 코 틀린 언어 문서 :

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

당면한 문제에 적용 :

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

Peter Lamberg가 지적했듯이 익명 클래스가 실제로 기능 인터페이스 ( 즉, 추상 클래스가 아님) 의 구현 인 경우 SAM 변환 을 사용하여이 명령문을 더욱 단순화 할 수 있습니다.

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

Java 및 Kotlin에 정의 된 인터페이스의 다양한 사용법에 대한 이 토론 도 참고 하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.