Kotlin'de anonim soyut sınıfın bir örneği nasıl oluşturulur?


114

Bunun KeyAdapter, geçersiz kılınabilen birkaç yönteme sahip soyut bir sınıf olduğunu varsayalım .

Java'da şunları yapabilirim:

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

Kotlin'de aynısı nasıl yapılır?


1
Olumsuz oy vermedim, ancak sorunuz çok az araştırma çabası gösteriyor. İçin basit bir Google arama KOTLIN anonim sınıfların yukarı dönüşler bu sayfayı Anonim iç sınıfa Kotlin analog nasıl oluşturulacağını - her şeyin - tartışmaktadır.
Ted Hopp

5
Ayrıca Kotlin ile yeni başlıyorum. Bu soru çok makul bir google aramasıyla ilk hit olarak karşımıza çıkıyor. Benim için çok kafa karıştırıcı olan şey, sorudaki KeyAdapter'ın büyük olasılıkla java.awt.event.KeyAdapter olmasıydı, bu 3 yöntemli soyut bir sınıf ve basit val k: KeyAdapter = KeyAdapter { println("Hello, world!") }işe yaramaz. (Bununla birlikte, lambda sözdizimini arıyordum.) Sanırım tam olarak bu başlığa sahip bir soru arayacağım, ancak daha iyi formüle edilmiş bir soru ve bunu bir yorumla ona bağlayacağım ...
Peter Lamberg

@PeterLamberg java.awt değil, Intellij eklentileri API'sı.
Tvaroh


12
Bunun neden çok basit olarak işaretlendiğini anlamıyorum. Soru çok beğenildi, yani pek çok insan bu problemle karşı karşıya. Dil farklılıkları nedeniyle, Google'daki ilk isabetin çözüm olup olmadığı belli değil. Resmi belgelere göz attım ama SO'daki bu soru bunu açıklığa kavuşturdu.
Muz

Yanıtlar:


178

Gönderen resmi Kotlin dil belgelerine :

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

Elinizdeki sorununuz için uygulandı:

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

Peter Lamberg'in işaret ettiği gibi - eğer anonim sınıf aslında işlevsel bir arayüzün uygulamasıysa ( yani soyut bir sınıfın uygulaması değilse ), SAM Dönüşümleri bu ifadeyi daha da basitleştirmek için kullanılabilir:

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

Lütfen Java ve Kotlin'de tanımlanan farklı arabirim kullanımları hakkındaki bu tartışmaya da dikkat edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.