2016-03-30 13 views
0

ClassA adlı bir sınıf var, FunctionA adlı bir genel işlevi vardır.Bazı sınıflar tarafından bir yöntem nasıl çağrılır, ancak geri kalanı bulamadı?

ClassB adlı başka bir sınıf var, FunctionA'yı kullanması gerekiyor ve ClassA'nın bir alt sınıfı değil.

ClassC adlı üçüncüsü, FunctionA ClassC tarafından çağrılmamalıdır ve ClassA'nın bir alt sınıfı değildir. Ayrıca, ClassB ve ClassC arasındaki ilişki de kalıtım değildir.

Bazı çözümler sağlanmışsa? ya da uygun tasarım desenleri varsa?

Yardımlarınız için teşekkürler.

+0

[Burada] sınıf B için sağlanan metotlar görmez Bu şekilde sınıf C sınıfı C ile kullanılan bir arayüz AC tarafından kullanılan bir arabirim AB uygulamak (http://stackoverflow.com/questions/182278/is-there-a-way-to-simulate-the-c-friend-concept-in-java) size yardımcı olabilecek ilgili bir sorudur. –

+0

Merhaba @JornVernee, bana yardım ettin. Bağlantınızdan, Salomon BRYS'den en uygun cevabı aldım. Teşekkürler. – Ivan

cevap

3

Sen (diğerinde ve ClassC) ClassA ve ClassB aynı paket içinde yerleştirebilir ve yönteme FunctionA için package-private (veya default) erişim düzenleyiciyi kullanabilirsiniz.

Bu çözüm en kolay ve sadece JLS specs (herhangi bir JVM uygulanması herhangi bir dil seviyesi için ve üzerinde çalışıyor) kullanır:

Örnek 6,6-4. Paket-Access Alanlar, Yöntemleri ve Kurucular erişim

kamu erişim değiştiricileri, korumalı veya özel hiçbiri belirtilirse

, veya kurucu paket erişimi olan bir sınıf üyesi: o erişilebilir sınıf üyesi bildirilen sınıfın bildirimini içeren paket boyunca, ancak sınıf üyesi veya kurucu başka bir paket erişilemiyor. yansıması, kod oluşturma vb - - senin sorunla başa çıkmak için

diğer yolları çok daha karmaşıktır, arabası ve yavaş

PS: ayrıca yöntem FunctionA kamu bırakın ve içine uygulamayı ayrıştırmak mümkündür iki modül. İlk modülde ClassA ve ClassB ile ikinci ClassC numaralı belgeleri yerleştirmelisiniz. İlk modül bağımlılığı ikinci olarak kullanabilir, ancak ikincisinin birinciye erişimi olmamalıdır. Bu şekilde karmaşık uygulamalar için daha uygundur ve ben

+0

Son parçanın noktasını alamıyorum.', bazı anahtar kodları verebilir misiniz? Ayrıca, daha çok çözmek istediğim, Sınıf A ve Sınıf B'nin aynı pakette bulunmamasıdır. @Cootri – Ivan

+0

evet, sadece bir başlangıç ​​noktası için google ** "maven çoklu modül projesi" **. Web'de birçok örnek vardır: http://www.codetab.org/apache-maven-tutorial/maven-multi-module-project/, http://www.mastertheboss.com/jboss-frameworks/maven- öğreticiler/jboss-maven/maven-multi-modül öğretici ve benzeri – Cootri

1

Belki (büyük ölçekli uygulamalar için çok zor olabilir) bu tür odaklı bağımlılık grafikler ile işlemek için böyle Maven veya Gradle olarak inşa araçları kullanmak için tavsiye Interface segregation principle, KATI ilkelerinden biri , sorununuzu çözebilir.

yapabilir sınıf A B sınıfı ve

İlgili konular