SORU
19 Mayıs 2009, Salı


Özel bir yöntemi Çağırmak için bir yolu var mı?

XML ve yansıması başka bir sınıfa Objects dönüş için kullanan bir sınıf var.

Normalde bu nesneler bir dış nesnenin alt alanları vardır, ama bazen anında oluşturmak istediğim bir şey var. Boşuna böyle ama bir şey denedim. Bu Java yansıması için private yöntemleri erişmek için izin vermez, çünkü bu olduğuna inanıyorum.

Element node = outerNode.item(0);
String methodName = node.getAttribute("method");
String objectName = node.getAttribute("object");

if ("SomeObject".equals(objectName))
    object = someObject;
else
    object = this;

method = object.getClass().getMethod(methodName, (Class[]) null);

Eğer bu yöntem sağlanan private ise NoSuchMethodException başarısız. Yöntemi 7 ** veya başka bir sınıf türetmek için yapma bunu çözebilirdim.

Uzun lafın kısası, eğer yansıma) private bir yöntemi erişmek için bir yolu varsa merak ettim.

CEVAP
19 Mayıs 2009, Salı


Yansıması ile özel bir yöntemi çağırabilirsiniz. İlan kodu son bit değiştirme:

method = object.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
Object r = method.invoke(object);

Uyarılar bir çift vardır. İlk getDeclaredMethod tek yöntem mevcut Class, supertypes değil miras ilan bulacaksınız. Gerekirse bu yüzden, somut sınıf hiyerarşisinin gez. İkinci olarak, bir SecurityManager setAccessible yöntem kullanımını engelleyebilir. Yani, PrivilegedAction olarak çalıştırmak için gerekli olabilir, (AccessController Subject kullanarak).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • lissaandbeauty

    lissaandbeau

    24 Aralık 2011
  • TheDailyTechDose

    TheDailyTech

    15 EKİM 2012
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011