Java'da, değiştirilmeden önce değerini almak istediğim özel bir değişkeni olan bir sınıfı genişlettim. Süper değişkende bu değişkene erişmek için herhangi bir yöntem yoktur. super().m_zoomArea
'u denedim (değişken, ZoomableChart
jChart2D sınıfındadır). Değişken, mouseDragged
yöntemi çağrıldığında güncellenir. Bu yöntemi geçersiz kıldım ve değiştirilmeden önce değişkenin değerini almak istiyorum.Java'da süper() sınıfının özel bir değişkenine erişme - JChart2D
cevap
Yapamazsınız. numaralı numaralıno'lu tüm değişken, değişkene ulaşamayacağınızdır. Eğer sınıf onu bulmak için herhangi bir yol vermediyse, onu elde edemezsin. Bu, sınıfta bir tasarım hatası olabilir ya da olmayabilir, ancak uygun ayrıcalıklarla ( önermiyorsa - temel olarak özel uygulama ayrıntılarına güveniyorsanız) yansıma kullanmıyorsanız, düşünmeniz gerekecek. alternatif bir yaklaşım.
Sınıfın dışından özel değişkenlere erişemezsiniz. Erişebilmek için korunmasını sağlamalısınız.
Yansımayı kullanabilirsiniz ama bu kötü bir fikir. Özel bir alan özeldir çünkü geliştirici bununla uğraşmanızı istemez.
Size burada yapmanın bir yolunu göstermeyeceğim, ancak gerçekten yaptıklarını biliyorsanız, aşağıdaki bağlantıları kendi risklerinize göre takip edin. Yine, bunu yapmayı bile düşünmemelisin. Aynı konu üzerinde
:
Sen setAccessible bkz Özellikle (Yansıma API ile yapabilirsiniz () yöntem). Her neyse, bu bir kesmek ve VM'de bir SecurityManager kuruluysa çalışmayabilir.
Herhangi bir sınıfın özel değişkenine erişebilirsiniz, ancak bu, OOP - kapsüllemenin temel ilkelerinden birini kırdığınız için kötü bir fikirdir. Ancak bazen programcı bunu kırmaya zorlanır.
Genişletilmiş sınıf
public class ExtZoomableChart
extends ZoomableChart {
public Rectangle2D getZoomArea() {
try {
Field field = ZoomableChart.class.getDeclaredField("m_zoomArea");
field.setAccessible(true);
Object value = field.get(this);
field.setAccessible(false);
if (value == null) {
return null;
} else if (Rectangle2D.class.isAssignableFrom(value.getClass())) {
return (Rectangle2D) value;
}
throw new RuntimeException("Wrong value");
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
ve çağrı örnek: İşte sorunu çözer koddur
public class Main {
public static void main(String[] args) {
ExtZoomableChart extZoomableChart = new ExtZoomableChart();
Rectangle2D d = extZoomableChart.getZoomArea();
System.out.println(d);
}
}
Sen özel olsun ZoomableChart uzatmak gerekmez değişken. Neredeyse her yerden değer kazanabilirsin. Ama unutmayın - genellikle kötü bir uygulamadır.
- 1. Neden alt sınıfım farklı bir pakette olduğunda, süper sınıfının korunan bir değişkenine erişemiyor?
- 2. Bir HTML dosyasındaki Javascript değişkenine erişme
- 3. Bir hash ile önceden sabitlenmiş bir JSON değişkenine erişme (#)
- 4. Başka bir dosyadan C++ extern "C" değişkenine erişme
- 5. Jenkins boruhattında Kabuk adımından bir Groovy değişkenine erişme
- 6. Yansıma kullanarak bir model sınıfının statik değişkenlerine erişme
- 7. Java Yerel Yerleşik Sınıflar ve süper yöntemlere erişme
- 8. sbt üzerinden bir Bintray özel havuzuna erişme
- 9. Sinatra özel ayarlarına Hizmet'ten erişme
- 10. Özel değişkenlere kapatma içinde erişme
- 11. Özel yuva seçenekleri bağımsız değişkenine herhangi bir azaltma uygulamıyor
- 12. Android: Özel görünümün süper sınıfından bir özellik nasıl edinilir
- 13. Neden süper bir
- 14. Bir "süper" aramanın Scala
- 15. Yazıcı ile javada dizileri kullanma
- 16. Pencereler için tutulmayı kullanarak javada akış
- 17. Salatalık javada senaryo adı nasıl alınır?
- 18. Django süper sınıfı yöneticisi, ForeignKey aracılığıyla çocuk sınıfının istenmeyen nesnelerine sahiptir.
- 19. Özel bir AuthorizeAttribute sınıfının içinde RedirectToAction() kullanmak mümkün mü?
- 20. Çağrı Süper Oluşturucu
- 21. Tekil sınıfının bir özelliğinin
- 22. Python 3, süper .__ del __()
- 23. Özel JSP etiketlerinden Request nesnesine erişme
- 24. Bash komut dosyasında bir değişkene erişme
- 25. Devise Yapılandırma Değişkenlerine Erişme
- 26. Alt sınıftaki bir alıcının süper sınıf değerine nasıl erişebilirim?
- 27. Java'da bir MidiDevice'e erişme
- 28. Süper aktivite
- 29. Java süper değişken bir 0
- 30. CoreData - NSManagedObject öğesinin alt sınıfının bir alt sınıfının nasıl oluşturulacağı (Generation Gap pattern)