user2346325 user2346325 - 6 months ago 31
Java Question

Unmodifiable List in java

I'm trying to set a List unmodifiable.

In my code, i have a method which returns a list.

This list should'nt be modified, but i dont want to catch the exception returned by the unmodifiableList.

private List<T> listeReferenceSelectAll = null;
List<T> oListeRet = new ArrayList<T>();
oListeRet = listeReferenceSelectAll;
return new ArrayList<T>(oListeRet);


It is an existing code and i have to transform it to return an unmodifiable list, but if an "add" method has been called, no exception has to be caught.

First i have create a class which implements List to override "add" method to log the exception and not to catch it.

But i don't know how corretly instanciate it...

If you have any other solutions,
Thanks in advance for your help :).

Answer

If you absolutely must do this, try to follow the contract specified by java.util.List in the list you are creating.

Your code would look something like

public class UnmodifiableArrayList<E>  extends ArrayList<E> {

    public UnmodifiableArrayList(Collection<? extends E> c) {
        super(c);
    }

    public boolean add(int index) {
        return false;//Returning false as the element cannot be added 
    }

    public boolean addAll(Collection<? extends E> c) {
        return false;//Returning false as the element cannot be added 
    }

    public E remove(int index) {
        return null;//Returning null as the element cannot be removed
    }
}

Add any more methods you need on the same lines. Just ensure that all the constructors and methods that might by used to modify in your code are overriden, so as to ensure the list is unmodifiable.

Using the Collections API is the cleaner and better way to do it, so use this way only if using Collections.UnmodifiableList does not satisfy your need.

And keep in mind this will be a nightmare while debugging so log as much as possible.