изменить тип списка <String> - PullRequest
2 голосов
/ 01 мая 2019

Я хочу вставить в базу данных значения продуктов типа arrayList, но я получаю эту ошибку "java.lang.String cannot be cast to model.Product".Проблема в том, что я сделал в сервлете.это его код:

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();
}

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Вы не можете преобразовать список из типа в другой.Если вы хотите «изменить тип», вы должны преобразовать его:

, используя лямбду Java 8:

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);
0 голосов
/ 01 мая 2019

В вашем коде:

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);
}

Теперь я предполагаю, что у вас есть сеттер для установки имени в Product. Возможно, у вас есть конструктор, которому вы можете передать имя (и сохранить строку кода).

...