Tengo una clase que usa XML y reflejo para devolver Object
a otra clase.¿Alguna manera de invocar un método privado?
Normalmente, estos objetos son subcampos de un objeto externo, pero ocasionalmente es algo que quiero generar sobre la marcha. He intentado algo como esto, pero fue en vano. Creo que es porque Java no le permitirá acceder a los métodos private
para la reflexión.
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);
Si el método es proporcionado private
, se produce un error con un NoSuchMethodException
. Podría resolverlo haciendo el método public
, o haciendo otra clase para derivarlo.
En pocas palabras, solo me preguntaba si había una forma de acceder a un método private
a través de la reflexión.
cuando hice esto en el pasado, también llamé a method.setAccessible (falso) después de llamar al método, pero no tengo idea si esto es necesario o no. – shsteimer
No, cuando establece la accesibilidad, solo se aplica a esa instancia. Siempre y cuando no permitas que ese objeto particular del Método escape de tu control, es seguro. – erickson
Estoy intercambiando amor, compañero. Respuesta impresionante + código incorrecto == día no tan malo. – droope