我有一个POJO对象和一组适当的数据。
import java.util.ArrayList;
import java.util.List;
public class TestPojo {
private String name;
private String number;
private String id;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public static void main(String[] args) {
TestPojo test = new TestPojo();
List<String> sampleData = new ArrayList<>();
sampleData.add("Bob");
sampleData.add("641-613-623");
sampleData.add("id-1451");
sampleData.add("Male");
test.setName(sampleData.get(0));
test.setNumber(sampleData.get(1));
test.setId(sampleData.get(2));
test.setSex(sampleData.get(3));
}
}
我的问题是如何在循环中用数据填充我的POJO对象?是否可以迭代所有对象设置器并在适当的位置设置List中的数据?我知道在这种情况下反思会有所帮助。
答案 0 :(得分:4)
这是一个简单示例,可以通过反射调用 setters (需要调整):
[如果这是一个好方法,则是另一个问题。但要回答你的问题:]
public static void main(String[] args) throws Exception
{
//this is only to demonstrate java reflection:
Method[] publicMethods = TestPojo.class.getMethods(); //get all public methods
TestPojo testObj = TestPojo.class.newInstance(); //when you have a default ctor (otherwise get constructors here)
for (Method aMethod : publicMethods) //iterate over methods
{
//check name and parameter-count (mabye needs some more checks...paramter types can also be checked...)
if (aMethod.getName().startsWith("set") && aMethod.getParameterCount() == 1)
{
Object[] parms = new Object[]{"test"}; //only one parm (can be multiple params)
aMethod.invoke(testObj, parms); //call setter-method here
}
}
}
您还可以将所有setter方法保存在列表/集中以供以后重复使用...
但正如其他人已经说过的那样,你必须小心这样做(使用反射)!
干杯!
答案 1 :(得分:2)
你不容易 - 而且你不应该这样做。
你知道,你的POJO课程提供了一些制定者。所有这些都具有 distinct 的含义。您的第一个错误是模型中所有这些字段都是字符串:
换句话说:你的前提是&#34;输入&#34;数据表示为数组/列表已经存在缺陷。
您编写的代码几乎没有提供任何有用的抽象。所以 - 而不是担心如何在某些循环上下文中调用这些setter方法 - 您应该退一步并改进模型。
并提示:如果这真的是关于从字符串输入填充POJO对象 - 那么将您的字符串转换为JSON格式,并使用gson或jackson等工具为您执行(基于反射)映射。
答案 2 :(得分:0)
在你的班级中定义:
public TestPojo(String name, String number, String id, String sex){
this.name = name;
this.number = number;
this.id = id;
this.sex = sex;
}
此处使用List也没有多大意义。我建议使用HashMap然后在for循环中迭代它,正确调用上面的构造函数。