Tengo una pregunta sobre la historia de Java.
Java ha tenido ArrayList desde 1.2.
Java tiene genéricos desde la versión 1.5.
¿Cómo fue la implementación de ArrayList sin genéricos para definir el tipo?
Todo se hizo con Object (y hubo mucho casting involucrado), por ejemplo:
ArrayList list = new ArrayList(); list.add(new Thingy()); // ... Thingy t = (Thingy)list.get(0); // Note ---^^^^^^^^ La lista solo sabía que lo que almacenaba era Object , dependía del código que usaba la lista para volver a convertir a un tipo útil.
Como puede imaginar, esto conduce a todo tipo de cosas desagradables: puede colocar el tipo de objeto incorrecto en la lista y luego obtener ClassCastException s más tarde cuando intenta convertirlo en el tipo que esperaba; si cambiaba lo que estaba en la lista, tenía que cambiar sus yesos en todas partes e inevitablemente olvidar uno, etc., etc. Los genéricos ayudaron a eliminar esos puntos débiles.
Antes de los genéricos, ArrayList tiene el objeto como tipo para que pueda insertar y recuperar el tipo de objeto, lo que significa que debe convertirlos mientras recupera el tipo respetado. Después de los genéricos, se eliminó este tipo de código redundante.
Si ha mirado de cerca los documentos genéricos , su pregunta específica ha sido respondida
Eliminación de yesos.
The following code snippet without generics requires casting: List list = new ArrayList(); list.add("hello"); String s = (String) list.get(0);Cuando se reescribe para usar genéricos, el código no requiere conversión:
List<String> list = new ArrayList<String>(); list.add("hello"); String s = list.get(0); // no castEn realidad, no deberías hacer este tipo de preguntas en stackoverflow. Lo que todos esperan es un código tuyo para depurar... Pero de todos modos, pareces ser nuevo en stackoverflow...
También puede usar arraylist sin genéricos. Por ejemplo, si usa genéricos para contener elementos de un tipo particular, se ve así...
ArrayList<String> list=new ArrayList<>();Si no quiere usar genéricos, simplemente puede usar esto
ArrayList list =new ArrayList();Déjame decirte la gran desventaja de usar sin genéricos. Si no usas genéricos, asume todo como objetos. Por lo tanto, debes escribirlos a tu tipo de datos particular cada vez que recuperas elementos.
Por ejemplo
for (Object o:list) { String s=(String)o; System.out.println(s); }es lo que tiene que hacer si no usa genéricos.. Si usa genéricos
después
for(String s:list) { System.out.println(s) }Espero que esto ayude....:)