2016-05-09 2 views
0

以下のような入力の場合は、それぞれのセッターメソッドを呼び出したいと思います。 たとえば 入力:Java - 与えられた入力キーのためのセッターメソッドの発見

name | age 
abc | 32 
bac | 43 

上記の入力が「List<Map<String, String>>」の下に保存され、私は「年齢」の「名前」とsetAgeのためのsetNameを見つけることができるとのsetNameと32に「ABC」を割り当てる必要がありますsetAgeへ。 setNameとsetAgeの両方がJavaファイルで宣言されています。

私は解決策を見つけることを試みているBeanUtilsとReflection APIを検討しました。

親切にあなたのリストが同様に移入された場合、私の要件

+0

方法を:

public class ObjWithSetters { private static final PrintStream out = System.out; public void setName(String name) { out.println("Setting the name: " + name); } } 

そして、ここでそれを検索する方法ですか? [PropertyAccessorFactory](http://docs.spring.io/spring-framework/docs/2.5.2/api/org/springframework/beans/PropertyAccessorFactory.html)からインスタンスを取得 – dnault

+0

キーは小文字セッターで "set"の後の最初の文字は大文字ですか? –

+0

あなたはReflection APIを「探検した」と言いますが、これまでに試したことがないAPIは投稿していません。あなたが他人を助けようとしたことを投稿してください。 – ManoDestra

答えて

0

を達成するためにあなたの意見を共有:行うには超簡単

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

:反射で

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

あなたのコードのようなものでなければなりませんあなたが探しているものであれば、Reflectionを使ってください:

オブジェクトセッターに:春のBeanWrapperについて

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

あなたの時間と入力に感謝します。入力は私がどのように進めるべきかについてのいくつかの光を放つ。 –

関連する問題