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

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • bombjack2991

    bombjack2991

    29 HAZİRAN 2008
  • manadude21

    manadude21

    11 Mart 2008