gpt4 book ai didi

java - 如何使用 BeanUtils.populate 方法从 String[] 转换为 ArrayList

转载 作者:行者123 更新时间:2023-12-01 23:56:08 26 4
gpt4 key购买 nike

如何使用 BeanUtils.populate 方法从 String[] 转换为 ArrayList?看起来我可以使用 ArrayConverter 类,但我很难找到如何做到这一点的解释。

这是我创建的一些测试代码:

public class TestAction {
public static TestBean testPopulate() throws IllegalAccessException, InvocationTargetException {
HashMap<String, Object> map = new HashMap<String, Object>();
TestBean bean = new TestBean();
String[] names = {"teststring","testboolean","testinteger","testarray"};
String[] array = {"hi","bye"};
Object[] values = {"TEST","","100",array};
int i = 0;
while (i < names.length) {
String name = names[i];
map.put(name, values[i]);
i++;
}
BeanUtils.populate(bean, map);

return bean;
}

public static void main(String[] args) {
try {
TestBean bean = testPopulate();
System.out.println(bean.getTeststring() + " " + bean.getTestinteger() + " " + bean.getTeststring() + " " + bean.isTestboolean());
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public class TestBean {
private String teststring;
private boolean testboolean;
private int testinteger;
private ArrayList<String> testarray;

public String getTeststring() {
return teststring;
}
public void setTeststring(String teststring) {
this.teststring = teststring;
}
public boolean isTestboolean() {
return testboolean;
}
public void setTestboolean(boolean testboolean) {
this.testboolean = testboolean;
}
public int getTestinteger() {
return testinteger;
}
public void setTestinteger(int testinteger) {
this.testinteger = testinteger;
}
public ArrayList<String> getTestarray() {
return testarray;
}
public void setTestarray(ArrayList<String> testarray) {
this.testarray = testarray;
}

}

我传入一个 String[] 类型,希望它知道如何转换为 ArrayList,但它失败了。

最佳答案

这是一个通用答案,因为我通常不使用 Beans。 BeanUtils 可能应该处理这种情况,但这会让我感到惊讶。

字符串数组与 ArrayList 对象不同,尽管它们有相似之处。从一种隐式转换为另一种通常是一个糟糕的主意,因为有多种逻辑方法可以完成。

  • 您可以使用Arrays.asList()它接受一个数组并返回一个包装 List 对象。请注意,它不是 ArrayList,而是 List 的固定大小自定义实现,它直接与传递的数组交互,这意味着无需分配新的存储空间。

  • 如果您确实想要一个 ArrayList,您可以根据您获得的 List 对象构造一个新的,方法是:

    ArrayList<String> ls = new ArrayList<String>(Arrays.asList(myArray));

    此调用确实分配一个新的存储数组,但如果您想要可调整大小,则必须接受 O(n) 成本。

这两种可能的选择,根据您的用例,两者都同样有效,这正是您的 Bean 将数组隐式转换为 List 不是一个好主意的原因 - 哪种实现它应该选择吗?如果您尝试调整大小,快的会引发异常,还是慢的不会抛出异常?

尽可能明确您的类型转换。尽管冗长看起来/令人讨厌,但这却是 Java 最强大的功能之一。

关于java - 如何使用 BeanUtils.populate 方法从 String[] 转换为 ArrayList<String>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com