8

我很难理解一个概念。我正在尝试将 a 转换ArrayList<String>List(或List<String>),但我一直遇到强制转换异常。是的,我看到了将字符串数组转换为列表的代码,但我觉得这是一个不同的场景。我的相关代码在这里,请注意声明是因为我正在使用 GWT,因此必须将一些东西声明为静态和最终的......

private static List<String> values;
Ioma.dataservice.getPendingOrders(new AsyncCallback<ArrayList<Order>>(){
    @Override
    public void onFailure(Throwable caught) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onSuccess(ArrayList<Order> result) {
        ArrayList<String> orderNumbers = new ArrayList<String>();               
        //problem here, cannot cast arraylist<string> to list string for some reason? idk. SO it maybe?
        for(int i=0;i<result.size();i++){
            System.out.println("ordernumber: " + result.get(i).getOrderNumber());
            System.out.println("arraysize: " + result.size());
            orderNumbers.add(Integer.toString(result.get(i).getOrderNumber()));                 
        }
        for (int i=0; i<orderNumbers.size();i++){
            values.add(orderNumbers.get(i));
        }
        cellList.setRowData(values);
    }

});

基本上我正在尝试创建一个需要 List 作为输入的 cellList。我从数据库查询中获取订单的arrayList,然后遍历以提取订单号,然后将其放入arrayList,然后我想将其转换为List 以在cellList 中使用。有人可以解释为什么我不能这样做以及正确的方法应该是什么?

4

4 回答 4

20

我不明白你遇到的问题,因为 anArrayList实现了List一个List接口。

您可以更改此行

ArrayList<String> orderNumbers = new ArrayList<String>(); 

至:

List<String> orderNumbers = new ArrayList<String>();
于 2013-04-23T20:18:02.783 回答
5

AnArrayList<anything>已经是 a List<anything>,因为ArrayList实现了List接口。不需要铸造。

于 2013-04-23T20:16:18.373 回答
1

java.util.List是一个接口,并且ArrayList<E>已经实现了它,你不必强制转换任何东西

于 2013-04-23T20:17:07.707 回答
0

AnArrayList是 a List,所以我不确定会发生什么。不过,我确实有一个怀疑。查看文件顶部的导入。也许您在文件顶部有一行:

import java.awt.List;

我已经告诉我的 IDE 不要将java.awt.List其用作List. 但是,您仍然编写了太多代码。考虑 Java 的foreach循环:

@Override
public void onSuccess(ArrayList<Order> result) {
    List<String> orderNumbers = new ArrayList<String>();               
    for (Order order: result) {
        orderNumbers.add(Integer.toString(order.getOrderNumber()));                 
    }
    values.addAll(orderNumbers);
    cellList.setRowData(values);
}

但是您根本不需要 orderNumbers 变量。只需使用 values.add 而不是 orderNumbers.add。然后,你为什么要使用 aList<String>呢?你能在 aList<Integer>中生存并避免转换吗?

哎呀——你正在使用 GWT。Google 是否仍然建议程序员不要使用接口,这样它就不必在 Java 中生成每个具体的实现?

于 2013-04-23T20:28:51.437 回答