Although you might want to change one of the wildcards.
public static <U> void addAll(List<U>list, U...array)
You can modify this to have a List<? super U>. That way, you can use a List<Object> as well. Since the list stores U or a superclass of U, it is safe to add the array elements.