更改列表类型

问题描述 投票:2回答:2

我想将arrayList类型的产品的值插入到数据库中,但我收到此错误"java.lang.String cannot be cast to model.Product"。问题在于我在servlet中所做的演员。这是它的代码:

String buyer = request.getParameter("buyer");
List<String> prodlist = Arrays.asList(request.getParameterValues("product"));

List<Product> prodmlist = (List<Product>) (List<?>) prodlist;
Bill bill = new Bill(buyer, prodmlist);
myDAO.add(bill);

这是将填充的方法

public static void add(Bill bill) {
Connection cnx;
    try {
    cnx = Connect.getConnection();
    String req = "insert into bil values (?,?)";
    PreparedStatement st = cnx.prepareStatement(req);
    st.setString(1, bill.getBuyer());
    for (Product prod : bill.getProduct()) {
        st.setString(2, prod.getName());
        st.addBatch(); // add the statement to the batch
    }
    st.executeUpdate();    
    cnx.commit();
}
java servlets java-ee
2个回答
0
投票

在你的代码中:

List<String> prodlist = Arrays.asList(request.getParameterValues("product"));
// Need to convert here...
List<Product> prodmlist = (List<Product>) (List<?>) prodlist;

您需要从List<String>显式转换为List<Product>。做一些事情:

List<Product> products = new ArrayList<Product>();
for (String s: prodList){
    Product p = new Product();
    p.setName(s);
    products.add(p);
}

现在,我假设您有一个setter来设置Product上的名称。可能是您有一个构造函数,您可以将名称传递给(并保存一行代码)。


-1
投票

您无法将列表从类型转换为另一个类型。如果要“更改类型”,则必须将其转换为:

使用Java 8 lambda:

listReceived.forEach(string -> listProduct.add(new Product(string)));

通常的方式:

for (String string : listReceived) {
        listProduct.add(new Product(string));
}

我假设你的类Product有一个接受字符串的构造函数。如果没有,您应该解析字符串并在循环中实现产品的每个成员。

// expecting that all information are separated by a space
Product product = new Product();
String[] splittedString = string.split(" ");
product.name = splittedString[0];
....
listProduct.add(product);
© www.soinside.com 2019 - 2024. All rights reserved.