2014-07-09 16 views
8

Scala'daki bir Anonymous sınıfından başka bir sınıfı genişletmenin bir yolu var mı? Ben Yapmanız gerekenScala Anonim bir sınıfla genişletme nasıl kullanılır

abstract class Salutation { 
    def saybye(): String = "Bye" 
} 

class anotherClass() { 
    def dummyFunction() = { 

    val hello = new { 
     def sayhello(): String = "hello" 
    } extends Salutation 

    val hi = hello.sayhello //hi value is "Hello" 
    val bye = hello.saybye //bye value is "bye" 
    } 
} 

cevap

7

Yep ve Java yaptığı gibi hemen hemen aynı görünüyor: Salutation soyut olan

abstract class Salutation { 
    def saybye: String = "Bye" 
} 

val hello = new Salutation { 
    def sayhello: String = "hello" 
} 

val hi = hello.sayhello 
val bye = hello.saybye 

ise Aynı imzaya sahip bir sayhello yöntemiyle sınıf veya özellik, bir uygulama sağladınız; Bunu kullanıyorsanız eğer öyleyse, (çünkü yapısal tipleri Scala uygulanır yolu) yansımasını içeren

hello: Salutation{def sayhello: String} 

Not sayhello yönteme çağırır: aksi takdirde anonim yapısal türünün bir örneği oluşturmuş olacak Metot, muhtemelen yeni bir özellik veya sınıf tanımlamanız gerekir.

+0

İlk başta belirtmedim, fakat evet Selamlama soyut ... Selam söyleme yok, ama ihtiyacım olan ve kullanmak istediğim başka bir işlevi var. "Gerçek" bir sınıf oluşturmadan başka bir yolu var mı? – frank

+0

Evet, yukarıda verdiğim kod çalışacak ve her iki yöntemi de çağırabileceğiniz bir "Salutation {def sayhello: String}" örneğini göreceksiniz. –

+0

Hmmm Bunu şu şekilde kullanmam gerekiyor: "val merhaba: Selamlama {def sayhello: String}" Eğer öyleyse, ne demek istediğimi ve nasıl yarattığımı nasıl tanımlarım? – frank

1

gibi bir şey şu anlama gelir:

val hello = new Salutation { 
    def sayhello(): String = "hello" 
} 
+0

Beni bir dakikalığına kaybettiniz, ama bu tür bir bağlamsız, yalnızca kod yanıtının genellikle Yığın Taşması konusunda iyi bir şey olduğunu düşünmüyorum - özellikle de potansiyel olarak kafa karıştırıcı bir nüansın olduğu bir durumda . –

+0

Üzgünüm, sorumum tamamlanmadı ... Onu değiştirdim, şimdi açık olmalıyım :) – frank

İlgili konular