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

  • guillaume2111's channel

    guillaume211

    19 Kasım 2006
  • Madeon

    Madeon

    31 Ocak 2010
  • thegeniuses.tv

    thegeniuses.

    11 Aralık 2006