今天在开发过程中碰到了一个异常,之前都没注意过,特地记录一下。
在开发过程中,我想移除数组中的一个元素,又偷懒不想去挨个遍历,于是想到了List中的remove方法;那么能否将数组转换为集合呢?可以的,只需要使用Arrays.asList()方法,在其中传入数组即可返回List集合。这里我写了几行代码来模拟这个过程。
/**
* @author CaveWang
* @date 2022/10/15 15:17
*/
public class ConvertException {
public static void main(String[] args) {
String str[] = {"a","b","c"};
List<String> strings = Arrays.asList(str);
strings.remove("a");
}
}
看到这里是不是还觉得这能有什么问题啊,这不很正常嘛?一运行,完蛋,抛出异常如下:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
at day3.ConvertException.main(ConvertException.java:14)
可以看到,第14行也就是strings.remove(“a”);这里抛出了不支持的操作异常,网上查找了下,原来是Arrays.asList(strings);方法返回的List对象不是我们常见的ArrayList,而是Arrays的一个内部类,也就是说需要进行一下类型转换才可以使用remove方法。
解决方案如下:
//先创建一个我们常用的ArrayList
List<String> list = new ArrayList<>();
//再将Arrays.asList(strings);得到的list复制到ArrayList中
list.addAll(Arrays.asList(strings));
完整操作如下:
/**
* @author CaveWang
* @date 2022/10/15 15:17
*/
public class ConvertException {
public static void main(String[] args) {
String str[] = {"a","b","c"};
List<String> strings = Arrays.asList(str);
ArrayList list = new ArrayList();
list.addAll(strings);
list.remove("a");
list.forEach(s-> System.out.println(s));
}
}
输出结果:
b
c