今天下午在编写代码的过程中遇到一个问题,就是需要在字符串数组中新添字符串,为了效率更高,没有选择利用数组的复制这个方法,而是使用了字符串数组转换成集合的方式新增元素,然后再将该集合转换成数组即可;
但编写完代码,一运行,就出现java.lang.UnsupportedOperationException这个异常;
具体代码如下:
public static void strAppend(String[] strArr, String name) {
List<String> strList = Arrays.asList(strArr);
strList.add(name);
System.out.println(strList);
strArr = strList.toArray(new String[0]);
for (String str : strArr) {
System.out.println(str);
}
}
在网上查看如何解决该异常时,发现有人已经解决了这个问题,受益匪浅;
如何解决UnsupportedOperationException异常问题_java_脚本之家 (jb51.net)
原因是因为利用asList方法将数组转换成一个集合时并不是我们日常使用的ArrayList,
而是Arrays类中的一个内部类ArrayList;
如下图:
这个内部类ArrayList继承了抽象类AbstractList,但并没有重写add()方法,此时调用add()方法,实际上是执行的抽象类AbstractList中的add方法,才抛出异常;
这是AbstarctList抽象类中的add方法;异常就是从这里抛出的
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
所以解决办法是新建一个我们熟知的ArrayList集合,在该集合中重写了add方法,当我们调用add方法时,就不会再抛出异常;
具体代码如下:
public static void strAppend(String[] strArr, String name) {
// 改变在这里,需要new ArrayList即可;
List<String> strList = new ArrayList<>(Arrays.asList(strArr));
strList.add(name);
System.out.println(strList);
strArr = strList.toArray(new String[0]);
for (String str : strArr) {
System.out.println(str);
}
}
问题得以解决!!!