Recibirá la advertencia porque ArrayList
es parte de java generics. Básicamente, es una forma de detectar los errores de tipo en el momento de la compilación. Por ejemplo, si declara su lista de matriz con tipos Entero (ArrrayList<Integer>
) y luego intenta agregarle cadenas, obtendrá un error en tiempo de compilación, evitando bloqueos desagradables en tiempo de ejecución.
La primera sintaxis está ahí para la compatibilidad con versiones anteriores y debe evitarse siempre que sea posible (tenga en cuenta que los genéricos no estaban allí en las versiones anteriores de Java).
El segundo y el tercer ejemplo son prácticamente equivalentes. Como necesita pasar un objeto y no un tipo primitivo al método add
, su 3
se convierte internamente en Integer(3)
. Al escribir una cadena entre comillas dobles, está creando efectivamente un objeto String
. Al llamar al String("ss")
, está creando un nuevo objeto String
cuyo valor es el mismo que el parámetro ("ss").
A menos que realmente necesite almacenar diferentes tipos en su Lista, le sugiero que utilice una declaración de tipo adecuada, p. ArrayList<Integer> = new ArrayList<Integer>()
- le ahorrará muchos dolores de cabeza a largo plazo.
Si necesita varios tipos de datos en la lista, entonces el segundo ejemplo es mejor.
Para explicar el último punto de @ Thilo, muchos desarrolladores de Java dirían que mezclar varios tipos en una 'Lista
Permítanme agregar mi nombre de anti-patrón favorito aún no reconocido aquí: mezclar tipos no relacionados en una sola lista huele a [negación del objeto] (http://stackoverflow.com/a/3725728/40342). –