Sto cercando di capire il reflecton di Java e sto incontrando difficoltà quando lavoro con metodi setter non interi.Java Reflection getDeclaredMethod() con tipi di classe
Come esempio, come posso risolvere la chiamata "getDeclaredMethod()" di seguito?
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");
}
}
}
Una domanda che ho per voi, in quale scenario, cercherò di sapere quali metodi sono presenti nella classe e nelle variabili? perché cercherò di saperlo? Sto esplorando le ragioni per l'utilizzo di questo metodo getDeclaredMethod(), getDeclaredFields(), ecc. Puoi suggerire – gmhk
Un motivo (casuale) per l'uso di reflection è se vuoi creare una libreria di serializzazione/deserializzazione Json. La nota libreria di Google Gson utilizza pesantemente le riflessioni per raggiungere i suoi compiti. Esempi di tali usi possono continuare all'infinito. Ad esempio, puoi creare un protocollo di rete che puoi utilizzare per serializzare e inviare varie proprietà di oggetti Java a un'altra applicazione oa un server basato su un'altra lingua, risparmiando un'enorme quantità di tempo per non dover implementare un metodo serialize per tutte le classi che desideri scambio. –