开发中使用Java 8 的新功能时出现异常
代码:
public static void main(String[] args) {
List<String> list = Arrays.asList("Java","JavaScript","Phyton");
//removeif
System.out.println(String.join("-", list));
Predicate<String> predicate = (s) -> s.startsWith("J");
list.removeIf(predicate);
System.out.println(String.join("-", list));
}
异常:
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.Collection.removeIf(Collection.java:415)
......................................................
因为
Arrays.asList 返回的ArrayList<>(a)是Arrays的内部类。如果未认真看会被认为是util中的ArrayList。
这是常见的安全处理方式,貌似这里这样处理不是很恰当。