问题描述
- Java关于String转换其他数据类型的问题
- 小弟有个关于String转换其他数据类型的问题想请教各位大大,新手未有悬赏币,见谅。
下面贴代码,问题在最后。person类
package com.local.person.bean;public class Person { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
RecordItem类
public class RecordItem { private String key; private String value; public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; }}
转换方法BeanParser
package com.local.person.bean;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import java.util.Locale;public class BeanParser { public static <T> List<T> parse(List<List> records Class<T> classParam) throws InstantiationException IllegalAccessException { List<T> list = new ArrayList<T>(); Method[] methods = classParam.getMethods(); for (int i = 0; i < records.size(); i++) { List<RecordItem> record = records.get(i); T bean = classParam.newInstance(); for (int j = 0; j < record.size(); j++) { RecordItem item = record.get(j); for (Method method : methods) { String methodName = method.getName(); if (methodName.startsWith(""set"")) { String attr = methodName.substring(3).toLowerCase(Locale.getDefault()); if (attr.equals(item.getKey())) { try { method.invoke(bean item.getValue()); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } } list.add(bean); } return list; }}
执行下面的main方法
package com.local.person.bean;import java.util.ArrayList;import java.util.List;public class GetPersonList { public static void main(String[] args) { List<List> records = new ArrayList<List>(); List<RecordItem> record1 = new ArrayList<RecordItem>(); RecordItem item1 = new RecordItem(); item1.setKey(""id""); item1.setValue(""1""); record1.add(item1); RecordItem item2 = new RecordItem(); item2.setKey(""name""); item2.setValue(""jack""); record1.add(item2); List<RecordItem> record2 = new ArrayList<RecordItem>(); RecordItem item3 = new RecordItem(); item3.setKey(""id""); item3.setValue(""2""); record2.add(item3); RecordItem item4 = new RecordItem(); item4.setKey(""name""); item4.setValue(""tom""); record2.add(item4); records.add(record1); records.add(record2); List<Person> personList = new ArrayList<Person>(); try { personList = BeanParser.parse(records Person.class); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } for (int i = 0; i < personList.size(); i++) { Person person = personList.get(i); System.out.println(""id="" + person.getId() + ""name="" + person.getName()); } }}
事情是这样子的:有两条数据
id=1name=jack
id=2name=tom
放在两个RecordItem里面,外面套了两个List,我想把这两条数据装到两个Person里面,Person再放进List里面传回给main方法,main方法打印出来。
但是存在一个问题,就是Person里面的数据类型都是基本类型或封装类(不确定是什么实体类,里面会有什么数据类型),要怎么把RecordItem的String类型根据Person数据类型存进去,让method.invoke(bean item.getValue());不报错???
时间: 2024-08-31 14:19:36