2009-10-26 28 views
10

A sınıfım var ve bir alt sınıf B yazıyor. A, parametreli olan yalnızca bir kurucuya sahip. B, A. 'un bu süper yapıcısını çağırmak zorunda. Şimdi bir Nesne parametresi olarak kullanmak istiyorum. Bu nesne bir B yöntemini çağırmalıdır. Yani parametre nesnesi B referansını tutmak veya bir iç sınıf olmak zorundadır. Şimdi böyle inşa edici çağırmak istediğinizdeSüper kurucuyu çağırırken "bu" ya başvurmak?

public B(){ 
    super.(new parameter(this)) 
} 

... Eclipse diyor ki:

'bu' ne de 'süper' atıfta olamaz açıkça bir kurucu

başlatırken Bu etrafta dolaştığım tek şey, "bu" -instance'ı parametre nesnesine enjekte etmek için bir set-yöntemidir. Süper sınıfı düzenlemek istemem.

Bu konuda daha iyi bir yol görüyor musunuz?

+0

Hangi * dil * hakkında konuşuyorsunuz? –

+11

Jonathan ... java'ya bakın – craftsman

cevap

17

Derleyici, kendinizi burada ayağınızdan vurmanızı önlüyor. B, süper kurucuya yapılan çağrıya kadar tamamen yapılandırılmamış, bu nedenle (eğer derleyici izin verdiyse) bunu bir referans olarak iletirse ve B, B yöntemini çağırırsa B geçersiz bir durumda olur ve her türlü neden olur kötü problemlerin (aslında, A henüz başlatılmamış, ne de Object dahil olmak üzere zincirdeki herhangi bir sınıf).

Açık çözüm, B dışında işlevsellik sağlamak ve bunu parametrenin yapıcısına iletmektir. Özel çözümler, belirli bir soruna bağlı olacaktır, fakat B içinde statik bir iç içe geçmiş sınıf (aynı nedenden dolayı statik olması gerekir - bir iç sınıf dış sınıf örneğine dolaylı bir başvuruya sahiptir) belki de bu işlevselliği sağlayabilir. Belki de B parametresi ile süper sınıfı arasındaki ilişkiyi yeniden gözden geçirmeniz gerekebilir. Hepsi davaya bağlı.

+0

Bunu nasıl çözeceğimi biliyorum. Asıl sorun, süper sınıfın "eski" kod olmasıdır. Biraz farklı bağlamda yeniden kullanıyorum. Zarif bir çözüm arıyordum. Ama bence yok. Eski kodu yeniden kullanmak için fiyattır. –

+2

Yeni bir sınıfın eski saranın etrafına bir sarıcı olarak yerleştirilmesini sağlayabilirsiniz. Eski sınıf, yeni nesnenizle uygulayabileceğiniz bir arayüz uyguluyor mu? – Joe

+1

@ c0d3x, çözümünüzü (ayrı bir soruda) yayınlayabilir ve daha şık bir çözüm olup olmadığını sorun. Çözümünüzü görmek, ilgili özel vaka hakkında birçok soruyu yanıtlayacaktır. – Yishai

İlgili konular