Exception in thread "main" java.lang.UnsupportedOperationException

ht‮:spt‬//www.lautturi.com
Exception in thread "main" java.lang.UnsupportedOperationException

Error Message

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
	at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147)
	at hello.Lautturi.main(Lautturi.java:82)

Error Code

public class Lautturi {
	public static void main(String[] args) {

		List<String> immuList = List.of("hello","lautturi","java","python","world","lau");	   
		System.out.println(immuList);
		immuList.add("php");
	}
}

Cause

we try to modify an immutable list. (List.of())

Or

the list is created using asList method:

List<String> list = Arrays.asList("js","lautturi","java","python","perl");

It's a child/internal ArrayList in Arrays, but not java.util.ArrayList.

Solution

method 1 clone the list

public class Lautturi {
	public static void main(String[] args) {

		List<String> immuList = List.of("hello","lautturi","java","python","world","lau");	   
		System.out.println(immuList);
		List<String> clonedList = new ArrayList<String>(immuList);
		clonedList.add("php");
	}
}

method 2 create a new list using java.util.ArrayList.

public class Lautturi {
	public static void main(String[] args) {
		List<String> list = new ArrayList(Arrays.asList("hello","lautturi","java","python","world","lau"));	   
		System.out.println(list);
		list.add(2,"php");
	}
}
Created Time:2017-10-03 17:09:27  Author:lautturi