2010-11-19 36 views
3

Bazı yöntemlerle "Foo" özelliğim var. Bu özelliği herhangi bir sınıfa karıştırmak istiyorum. Ama ben sadece bir sınıf geçmesi nerede gibi bir şey gerekiyorÇalışma zamanında bir Sınıf için belirli bir Özellik Ekleme

val b = new Bar with Foo 

gibi bir şey yazmak istemiyorum ve Foo ile karıştırılır. Sadece bu özellik ile karıştırmak istiyorum, çünkü tüm sınıfların sadece Foo özelliği ile karıştırılması gerekiyor.

val b = new Factory(Bar) //Factory returns instance with trait Foo 

Bu post buldum ama inanıyorum.

Böyle bir şey scalada mümkün mü?

class Foo(bar:Bar) { 
    ... 
} 
object Foo { 
    def apply(bar:Bar) = new Foo(bar) 
    implicit def backToBar = this.bar 
} 

Sonra Foo içinde Foo ve Bar, sürüm arasında paylaşılan herhangi bir yöntem adlarında

val foo = Foo(myBar) 

olarak kullanmak:

+0

Bu fabrika örneğinde _type_ 'Bar' veya _instance_' Bar' iletiliyor mu? Eğer ikincisiyse, imkansız olsa da, genellikle imkânsız dönüşümler yeterlidir. –

+0

'Bar' türünde –

cevap

4

mevcut en iyi çözüm böyle Foo şey uygulamaktır Kullanılacak (bir karışımda aşırı yükleme ile olduğu gibi). Diğer tüm yöntemler, Bar'daki varyant kullanılacaktır.

teknik Bar yılında yöntemleri yalnızca şimdiye Foo tanımlanmış diğer Bar tanımlanan yöntemleri ve hiçbir zaman "aşırı yükleri" arayacak, mükemmel değildir. Aksi takdirde, ihtiyaçlarınız oldukça yakın.

+0

i yeni scala ama interaktif scala kabuğunun üstünde kod çalışmıyor, başka bir şey Bar değişkendir yani yani (Foo ile Bar) veya (Boo ile Foo), ben alamadım yukarıdaki kod, tam olarak ne yapar –

İlgili konular