Özel bir yöntemi Çağırmak için bir yolu var mı?
XML ve yansıması başka bir sınıfa Object
s 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
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).
Nasıl yansıma özel bir yöntemi çağırma...
javascript yöntemi özel durum yakalama...
Modern Python özel istisnalar bildirme...
Nasıl yansıması genel bir Yöntemi çağı...
Nasıl Android bir gecikmeden sonra bir...