2009-05-21 22 views
19

Estoy tratando de comprender el reflejo de Java y estoy teniendo dificultades cuando trabajo con métodos setter no enteros.Reflexión de Java getDeclaredMethod() con tipos de clases

Como ejemplo, ¿cómo puedo resolver la llamada "getDeclaredMethod()" a continuación?

import java.lang.reflect.*; 

class Target { 
    String value; 

    public Target() { this.value = new String("."); } 
    public void setValue(String value) { this.value = value; } 
    public String getValue() { return this.value; } 
} 

class ReflectionTest { 
    public static void main(String args[]) { 
     try { 
      Class myTarget = Class.forName("Target"); 

      Method myMethod; 
      myMethod = myTarget.getDeclaredMethod("getValue"); // Works! 
      System.out.println("Method Name: " + myMethod.toString()); 

      Class params[] = new Class[1]; 
      //params[0] = String.TYPE; // ?? What is the appropriate Class TYPE? 
      myMethod = myTarget.getDeclaredMethod("setValue", params); // ? Help ? 
      System.out.println("Method Name: " + myMethod.toString()); 

     } catch (Exception e) { 
      System.out.println("ERROR"); 
     } 
    } 
} 
+0

Una pregunta que tengo para ti, en qué caso, voy a tratar de saber qué métodos están en la clase y las variables? ¿Por qué intentaré saber eso? Estoy explorando las razones para usar este método getDeclaredMethod(), getDeclaredFields(), etc ... ¿Puede sugerir – gmhk

+0

? Una razón (aleatoria) para usar la reflexión es si usted quiere construir una biblioteca de serialización/deserialización Json. La conocida biblioteca de Google Gson usa mucho las reflexiones para realizar sus tareas. Ejemplos de tales usos pueden continuar para siempre. Por ejemplo, puede crear un protocolo de red que pueda usar para serializar y enviar varias propiedades de objetos Java a otra aplicación o a un servidor basado en otro idioma, ahorrándole una gran cantidad de tiempo por no tener que implementar un método de serialización para todas las clases que desee. intercambiar. –

Respuesta

20
params[0] = String.class; 

Usando class en String devolverá el Class<?> que se asocia con la clase String.

+4

Ugh. Soy un idiota. ¡Gracias! – Nate

+1

(¡Vaya, no quise votar el comentario!) Solo quería agregar que no estaba al tanto del otro día, así que no es tan obvio. – coobird

+0

Una pregunta que tengo para ti, ¿en qué situación, intentaré saber qué métodos hay en la clase y las variables? ¿Por qué intentaré saber eso? Estoy explorando las razones para usar este método getDeclaredMethod(), getDeclaredFields(), etc ... ¿Puedes sugerir? – gmhk

Cuestiones relacionadas