bir Innner
sınıf payının iki ayrı örneklerini Outer
sınıfı (== aynı örneği veya bağlama bağlı eşittir örneğin, kontrol etmek gerekiyor, bu, aslında, çok iyi bir sorudur).
Ben genel amaçlı bir arayüz yapmak öneririm (kesinlikle adlandırılmış iç sınıflar için gereken ancak "instancedof"/için demir olabilir değil): Herhangi adlandırılmış iç sınıfa uygulanabilir
public interface InnerClass<Outer> {
Outer getOuter();
}
.
Sonra böyle bir şey yapmak:
class MyInnerClass implements InnerClass<Outer> {
Outer getOuter() {
return Outer.this;
}
// remaining implementation details
}
ve bu yolu InnerClass<Outer>
arabirimini uygulayan herhangi bir iç sınıfından dış sınıf erişmek (ve aslında bunu uygulayan kontrol edin) olabilir. İçinizdeki sınıf anonim ise
, sadece (onun örnek için Zengin MacDonald sayesinde) yapabilirsiniz:
new InterfaceOrAbstractClass<Outer>() {
Outer getOuter() { // super inefficient but this is the only way !
return (Outer)getClass().getDeclaredField("this$0");
}
/* other methods */
}
ama InterfaceOrAbstractClass
zorunluluk anonim ait getOuter()
dışında erişmek mümkün InnerClass<Outer>
uygular sınıf gövdesi!
Javac, TÜM iç sınıflarda otomatik olarak bir tür InnerClass<Outer>
arabirimini uyguladıysa ve çok daha kolay anonim sınıflarda bile (bu da sorunsuz iç işleme yok) yapabilirse çok daha kolay olurdu!
Eğer çözme ne gibi sorunlar açıklayabilir? Yoksa bu akademik mi? Esas olarak, –
Akademik. Buna bir cevapla geldiğimde karşılaştım: http://stackoverflow.com/questions/763359/validating-instances-of-inner-classes/763504 İki cevap verdim, biri OP'nin kullanmak istediğini yapıyordu. Yukarıda kullandığım aynı geçici çözüm (getOuter() yöntemi). Ama benim diğer cevabımda (oyulmuş olanı) bunu farklı bir şekilde tasarladım ki, bu gerekli değildi. Ama bunu yapmanın mümkün olup olmadığını merak ediyordum. – Kip
Sağlanan örnek, bu sorunun en iyi cevabıdır. – Pindatjuh