版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lx_nhs/article/details/82219094
异常代码如下:
public static void main(String[] args) {
String[] strArr = {"1","2","3"};
List<String> list = Arrays.asList(strArr);
list.add("4");
}
抛出异常:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.yidu.edu.card.service.impl.UserWxappServiceImpl.main(UserWxappServiceImpl.java:375)
原因:
Aarrays.asList产生的list对象是其内部类ArrayList, 而不是java.utils.ArrayList对象. 两个ArrayList都继承了AbstractList抽象类, 但是前者没有重写抽象类的add()和remove()方法, 如果调用, 则会抛出java.lang.UnsupportedOperationException;
AbstractList抽象类add和remove方法如下:
/**
* {@inheritDoc}
*
* <p>This implementation always throws an
* {@code UnsupportedOperationException}.
*
* @throws UnsupportedOperationException {@inheritDoc}
* @throws ClassCastException {@inheritDoc}
* @throws NullPointerException {@inheritDoc}
* @throws IllegalArgumentException {@inheritDoc}
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
/**
* {@inheritDoc}
*
* <p>This implementation always throws an
* {@code UnsupportedOperationException}.
*
* @throws UnsupportedOperationException {@inheritDoc}
* @throws IndexOutOfBoundsException {@inheritDoc}
*/
public E remove(int index) {
throw new UnsupportedOperationException();
}