considering i have a method which gets a List passed as an param. Within this method i want to use for instance an ArrayList specific function on that list (lets say trimToSize()). What would be the general approach to deal with a problem like this ?
Here two example:
First approach (i don’t think this is good)
private void doSomething(final List<T> list) {
// ... do something
((ArrayList<T>) list).trimToSize();
// ... do something
}
Second approach (i think this one is better)
private void doSomething2(final List<T> list) {
final List<T> myList = new ArrayList<T>();
// Collections.copy(myList, list); or
myList.addAll(list);
((ArrayList<T>) myList).trimToSize();
//..do something
}
I’m curious whats the best solution for a problem like this.
Well, the preferred option is to just write the method to take an
ArrayListin the first place. If you needArrayListspecific functionality, the method has no business taking aList. Transfer the responsibility of ensuring that the parameter is of the right type to the caller and don’t fiddle around with it inside the method.