Esta pregunta tiene interés comprenderla bien.
PREGUNTA: ¿Cuál será el resultado de ejecutar este código?
List <String> list = Arrays.asList ("a", "b", "c");
System.out.println (list);
RESPUESTA: Este es un caso curioso, porque List es una interface, y por lo tanto no es instanciable. Podría parecer que por ello nos saltaría un error de compilación, pero no es así. El tipo devuelto por Arrays.asList es simplemente List, lo cual tampoco nos aclara mucho. No obstante, el resultado de ejecución es que se muestra por pantalla [a, b, c], lo cual muestra que se ha creado un objeto. ¿De qué tipo? Si nos ponemos a investigar…
if (list instanceof AbstractList) {System.out.println ("Es una instancia de AbstracList");}
if (list instanceof ArrayList) {System.out.println ("Es una instancia de ArrayList");}
if (list instanceof AbstractSequentialList) {System.out.println ("Es una instancia de AbstractSequentialList");}
El resultado es que por defecto Java, al menos en Java 6, le asigna por defecto el tipo AbstractList.
List <Integer> miListaEnteros = Arrays.asList (1, 5, 7, 13, 21); también es válido.
No obstante, el uso de esta sintaxis da lugar a comportamientos extraños. Por ejemplo, se permite la modificación de la lista con el método set pero no se permite su ampliación con el método add.