2016-05-09 5 views
0

Für die Eingabe wie unten, möchte ich die entsprechende Setter-Methode aufrufen. Zum Beispiel Input:Java - Finding Setter-Methode für eine bestimmte Eingabe-Taste

name | age 
abc | 32 
bac | 43 

Die obige Eingabe unter „List<Map<String, String>>“ gespeichert werden und ich sollte für „name“ und setAge für „Alter“ und ordnen „abc“ zu setName und 32 finden setName der Lage sein, setAge. Sowohl setName als auch setAge sind in einer Java-Datei deklariert.

Ich habe BeanUtils und Reflection API untersucht und bin dabei, eine Lösung zu finden.

teilen bitte Ihre Meinung meine Anforderung zu erreichen

+0

Wie wäre es Spring BeanWrapper? Holen Sie eine Instanz über [PropertyAccessorFactory] (http://docs.spring.io/spring-framework/docs/2.5.2/api/org/springframework/beans/PropertyAccessorFactory.html) – dnault

+0

können wir annehmen, dass der Schlüssel in Kleinbuchstaben sein wird und der erste Buchstabe nach "set" im Setter wird groß geschrieben? –

+0

Sie sagen, dass Sie die Reflection API "erforscht" haben, aber Sie haben noch nicht gepostet, was Sie bisher versucht haben, was nicht funktioniert. Poste, was du versucht hast, anderen zu helfen. – ManoDestra

Antwort

0

Wenn Ihre Liste bevölkert ist wie:

Map<String, String> m = new HashMap<>(); 
m.put("age","32"); 
m.put("name","abc"); 
list.add(m); 

Mit Reflexion sollte Ihr Code so etwas wie:

List<YourObject> resultList = new ArrayList<>(); // or List<Object> 
for(Map<String, String> map: list){ 
    YourObject obj = new YourObject();// or Object obj = Class.forName("package.YourObject").newInstance(); 
    for(String key: map.keySet()) { 
    String method = "set" + key.substring(0,1).toUpperCase() + key.substring(1); 
    obj.getClass().getDeclaredMethod(method, String.class).invoke(obj, map.get(key)); 
    } 
    resultList.add(obj); 
} 
0

Super einfach zu tun mit Reflexion, wenn Sie das suchen:

Ein Objekt mit einem Setzer:

public class ObjWithSetters { 
    private static final PrintStream out = System.out; 

    public void setName(String name) { 
     out.println("Setting the name: " + name); 
    }  
} 

Und hier ist, wie es suchen:

public class FindSetter { 

    private static final Logger LOG = Logger.getLogger(FindSetter.class.getName()); 

    public static void main(String[] args) throws Exception { 
     final Object myObject = new ObjWithSetters(); 

     final Method[] methods = myObject.getClass().getMethods(); 
     for(Method m : methods) { 
      if(m.getName().equals("setName")) { 
       m.invoke(myObject, "My name is Bob"); 
      } else { 
       LOG.info("I found this method: " + m.getName() + " but it is not the setter I want"); 
      } 
     } 
    } 
} 
+0

Danke für Ihre Zeit und Eingaben. Die Eingaben haben etwas Licht ins Dunkel gebracht, wie ich vorgehen sollte. –

Verwandte Themen