//增加货物
public static void addGoods() {
System.out.println("您选择的是添加商品功能");
System.out.println("请输入商品编号:");
int goodsNum = sc.nextInt();
System.out.println("请输入商品单价:");
double goodsPri = sc.nextDouble();
System.out.println("请输入商品名称:");
String goodsName = sc.next();
if (gl.add(new Goods(goodsNum, goodsPri, goodsName))) {
System.out.println("添加成功!");
}
}
//货物service
public class GoodsService {
//初始化货物
public static List initGoods(){
Goods g1 = new Goods(10.0, "笔记本");
Goods g2 = new Goods(2.0, "西红柿");
Goods g3 = new Goods(5.0, "辣条");
//存入数组中
Goods[] goods = {g1,g2,g3};
//对象数组转为集合
List<Goods> gl = Arrays.asList(goods);
return gl;
}
}
原因解读及解决办法:
调用Arrays.asList()生产的List的add、remove方法时报异常,这是由于Arrays.asList() 返回的是Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以会抛出异常。解决方法如下:
//初始化货物
public static List initGoods(){
Goods g1 = new Goods(10.0, "笔记本");
Goods g2 = new Goods(2.0, "西红柿");
Goods g3 = new Goods(5.0, "辣条");
//存入数组中
Goods[] goods = {g1,g2,g3};
//对象数组转为集合
List<Goods> al = new ArrayList(Arrays.asList(goods));
return al;
}
相当于Arrays.asList(goods)出来的集合是一个固定大小的箱子,如果需要添加,删除等操作,需要将其装入新的集合(大箱子)中
bug2
public class Hello01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("张三");
list.add("李四");
Iterator it = list.iterator();
for (Object o : list) {
if(o.equals("张三")){
list.add("王五");
}
}
System.out.println(list);
}
}
解读及解决方案:在list.add(“王五”);下一行加break;跳出
public class Hello01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("张三");
list.add("李四");
Iterator it = list.iterator();
for (Object o : list) {
if(o.equals("张三")){
list.add("王五");
break;
}
}
System.out.println(list);
}
}