Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

Java Top

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:


1. Overview

In this quick tutorial, we'll discuss a common Exception that can occur when working with some the API of most List implementations – the UnsupportedOperationException.

A java.util.List has more functionality than an ordinary array can support. For instance, with only one built-in method call, it's possible to check if a specific element is inside the structure. That's typically why we sometimes need to convert an array to a List or Collection.

For an introduction to the core Java List implementation – the ArrayList – please refer to this article.

2. UnsupportedOperationException

A frequent way in which this error occurs is when we use asList() method from java.util.Arrays:

public static List asList(T... a)

It returns:

  • a fixed-size List as of size of a given array
  • an element of the same type as the one in the original array and it must be an Object
  • elements in the same order as in original array
  • a list that is serializable and implements RandomAccess

Since T is a varargs, we can pass an array or the items directly as parameters, and the method will create a fixed-size initialized list:

List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");

We can also pass an actual array:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);

Since the returned List is a fixed-size List, we can’t add/remove elements.

An attempt to add more elements would cause UnsupportedOperationException:

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; 
List<String> flowerList = Arrays.asList(flowers); 

The root of this Exception is that the returned object doesn't implement the add() operation since it isn't the same as java.util.ArrayList.

It's an ArrayList, from java.util.Arrays.

Another way to obtain the same exception is by trying to remove an element from the obtained list.

On the other hand, there are ways to obtain a mutable List in case we need it.

One of them is to create an ArrayList or any kind of list directly from the result of asList():

String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" }; 
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));

3. Conclusion

In conclusion, it's important to understand that adding more elements to a list can be problematic for more than just immutable lists.

As always, the full source code of the examples is available over on GitHub.

Java bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

Generic footer banner
Comments are closed on this article!