我无法绕过一个概念。我正在尝试将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中,然后我想将其转换为List以在cellList中使用。有人可以解释为什么我不能这样做以及适当的方法应该是什么?
答案 0 :(得分:14)
我不理解您的问题,因为ArrayList
实现了List
List
作为接口。
您可以更改此行
ArrayList<String> orderNumbers = new ArrayList<String>();
为:
List<String> orderNumbers = new ArrayList<String>();
答案 1 :(得分:4)
ArrayList<anything>
已经是List<anything>
,因为ArrayList
实现了List
接口。不需要铸造。
答案 2 :(得分:1)
java.util.List
是一个界面,ArrayList<E>
已经实现了它,你不需要投出任何东西
答案 3 :(得分:0)
ArrayList
是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。然后,你为什么要使用List<String>
?你可以使用List<Integer>
生存并避免转换吗?
哎呀 - 你正在使用GWT。 Google是否仍然建议程序员不要使用接口,这样就不必在Java中生成每个具体的实现?