2013-07-07 74 views
46

Giả sử rằng KeyAdapter là lớp trừu tượng với một số phương pháp có thể bị ghi đè.Làm thế nào để tạo ra một thể hiện của lớp vô danh lớp trừu tượng trong Kotlin?

Trong java Tôi có thể làm:

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

Làm thế nào để làm điều tương tự trong Kotlin?

+0

Tôi đã không downvote, nhưng câu hỏi của bạn cho thấy rất ít nỗ lực nghiên cứu. Một tìm kiếm đơn giản của Google cho các lớp _anonymous trong kotlin_ sẽ xuất hiện [trang này] (http://blog.jetbrains.com/kotlin/2013/02/kotlin-m5-1/), thảo luận về tất cả mọi thứ - cách tạo ra tương tự Kotlin cho một lớp bên trong vô danh. –

+0

Tôi cũng mới bắt đầu với Kotlin. Câu hỏi này xuất hiện như là hit đầu tiên với một tìm kiếm google rất hợp lý. Điều gây nhầm lẫn với tôi là KeyAdapter trong câu hỏi rất có thể là java.awt.event.KeyAdapter, là một lớp trừu tượng với 3 phương thức và 'val k: KeyAdapter = KeyAdapter { println đơn giản (" Xin chào, thế giới! ") }' không hoạt động. (Tuy nhiên tôi đang tìm cú pháp lambda.) Tôi nghĩ tôi sẽ tìm câu hỏi anoter với tiêu đề chính xác này, nhưng một câu hỏi được xây dựng tốt hơn và liên kết câu hỏi này với một bình luận ... –

+0

@PeterLamberg nó không phải java.awt đó là API plugin Intellij. – Tvaroh

Trả lời

88

Từ the first hit on Google:

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

Áp dụng cho vấn đề của bạn trong tầm tay:

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

Như Peter Lamberg đã chỉ ra - nếu lớp nặc danh thực sự là một thực hiện một giao diện chức năng (tức là không phải lớp trừu tượng), SAM Conversions có thể được sử dụng để đơn giản hóa tuyên bố này hơn nữa:

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

Cũng xin lưu ý this discussion về cách sử dụng giao diện khác nhau được xác định trong Java và Kotlin.

+1

trong đó 'đối tượng' là một từ khóa (rõ ràng hơn tại liên kết đã cho hơn là với tô sáng cú pháp SO). – ataulm

+0

Cảm ơn bạn vì điều này, không có từ khóa đối tượng nó không hoạt động. Tôi đã có thể tạo 'OnPageChangeListener' cho ViewPager của mình. –

Các vấn đề liên quan