2012-10-15 24 views
6

Scala'daki özellikler, öğrendiğim kadarıyla, uygulamaların gerçekleştirilmesine izin verilen yöntemlerin dışında Java'daki arabirimlere benzer. Ayrıca, Scala sınıflarının aksine, onlara inşaat için argümanlar iletemezsiniz.Neden özellikler anlık olabilir?

Şimdiye kadar çok iyi. Ama neden onları örneklendirebilirim? Gerçekten, buna izin vermek için iyi bir sebep görmüyorum.

+1

Java: 'arabirimi Bar {}; Bar bar = yeni Bar() {}; – soc

cevap

22

Gerçekten onları oluşturmuyorsunuz. Java ile paralel çizdiğinizde, daha da ileri gidelim. Java'da soyut bir sınıftan veya bir Arayüzden bir Anonim sınıf oluşturabilirsin. Bu Scala neredeyse aynıdır: Bir özelliğin bir nesne oluşturduğunuzda küme parantezleri zorunlu olan

scala> trait A 
defined trait A 

scala> new A {} 
res0: A = [email protected] 

Not söyledi. Örneğin, şo yapamaz:

scala> new A 
<console>:9: error: trait A is abstract; cannot be instantiated 
       new A 
      ^

it would bir sınıf için mükemmel çalışıyor olsa da:

senin özelliğin bazı unsurlar uygulanmaması halinde Elbette
scala> class B 
defined class B 

scala> new B 
res2: B = [email protected] 

, size oluştururken bunları uygulamak gerekir nesne:

scala> trait C {def foo: Int} 
defined trait C 

scala> new C {} 
<console>:9: error: object creation impossible, since method foo in trait C of type => Int is not defined 
       new C {} 
       ^

scala> new C {def foo = 42} 
res4: C = [email protected] 
+0

+ 1 Thx, üzerine ışık yakar :-). – helpermethod

+4

Java ile karşılaştırmak için: “Yeni A {}” yazdığınızda, “A” özelliğini genişleten anonim bir sınıf oluşturuyorsunuz; '{}', anonim sınıfın gövdesidir (tıpkı Java'daki anonim iç sınıflar gibi). – Jesper

+0

'new A {}', 'A' ile yeni Nesne ile aynı şeydir – sourcedelica

İlgili konular