recientemente he leído un trozo de código que parece extraño para mí. Como sabemos, tenemos que inicializar el tipo genérico en colecciones cuando nos necesitan para su uso. También, sabemos que las Colecciones pueden contener Colecciones como sus elementos.

El código:

public class Solution {
public static void main(String args[]) {
    ArrayList res = returnlist();
    System.out.print(res.get(0));
}
public static ArrayList<ArrayList<Integer>> returnlist() {
    ArrayList result = new ArrayList();
    ArrayList<Integer> content = new ArrayList<Integer>();
    content.add(1);
    result.add(content);
    return result;
}}

Mi pregunta es

  • ¿por qué utilizar ArrayList result = new ArrayList(); para crear un objeto, ya que no le dio a la colección de la real tipo de elemento.
  • ¿por qué utilizar result.add(content); para agregar una colección para una colección con la colección de «resultado» es sólo un simple colección. No hemos definido como un ArrayList de ArrayList

OriginalEl autor Kai | 2014-09-05

5 Comentarios

  1. 10

    Java colecciones genéricas no se almacenan con un tipo para asegurar la compatibilidad hacia atrás con pre J2SE 5.0. El tipo de información que se quita cuando se añade a una colección genérica. Esto se llama Tipo De Borrado.

    Esto significa que una colección genérica puede ser asignado a un no genéricos de referencia y de objetos en un genérico escribió colección puede ser colocado en un no genérica, nontyped colección.

    Todos Java generics que realmente hace es asegurarse de que usted no se puede añadir el tipo equivocado para una lista genérica y ahorra de hacer un explícito mon recuperación; aunque es de hecho implícitamente.

    Más a este

    +1 creo que este es el más informativo de respuesta
    +1 [email protected]
    Es que no tengo la suficiente reputación para dar una puntuación a usted. LOL

    OriginalEl autor Ross Drew

  2. 9

    Sólo la adición de hasta proporcione respuesta

    Antigua :

    (A) ArrayList result = new ArrayList();

    va a crear un Arraylist para celebrar el «Objeto»


    Nueva Forma :

    ArrayList<Integer> content = new ArrayList<Integer>();

    esto representa un Arraylist que se mantenga «Entero» de los objetos. Este fue introducido por tipo en tiempo de compilación comprobar los efectos.


    ¿por qué ?

    Considerar el primer caso. Su entrada es de tipo Objeto. Sabemos que el Objeto de la super-clase de todas las clases. Podemos pasar un objeto Integer, String del objeto y así sucesivamente. Cuando la captura de los datos que el desarrollador tiene que llevar a cabo la correcta conversión de tipo. Dicen que si el desarrollador inicialmente piensa que el código se aceptan Entero objetos entonces añade el siguiente encasillado mientras que la captura de los datos

    Integer integer=(Integer) content.get(0);

    Este se supone que funciona. Pero si erróneamente se le pasa una Cadena que resultará en un error en tiempo de ejecución.

    Cómo se puede evitar ?

    Mediante la introducción de tiempo de compilación cheques


    Cómo funciona ?

    cuando especificamos con parámetros de tipo Entero de sólo los objetos pueden ser añadidos a la colección ArrayList. Otra cosa que mostrar el error.

    content.add(3); //will work
    content.add("HARSHAD"); //error shown

    Si con parámetros de los tipos genéricos son para el tipo de comprobación a los efectos de cómo corregir los datos pueden ser recuperados de la lista ?

    El compilador implícitamente realiza la conversión de tipo. Ver el código de ejemplo

    List<Integer> list=new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    Integer integer=list.get(0);
    System.out.println(integer);

    Lo que el compilador hace al realizar la compilación ?

    //perform type erasure
    (B) List list=new ArrayList();
        list.add(1);
        list.add(2);
    
    //the arraylist inturn accepts Object when you run the code 
    
    //add casting 
    Integer integer=(Integer)list.get(0);

    Conclusión

    Si usted ve los códigos (A) y (B) ambas son la misma. La única diferencia es que en el segundo caso el compilador implícitamente hace la misma operación.

    Finalmente para responder a su pregunta …

    ArrayList result = new ArrayList();

    está permitido para la compatibilidad con versiones anteriores. Aunque esto no es recomendable.

    Enlace oficial de Oracle docs explicar el mismo concepto.

    Muy clara la respuesta. Gracias!

    OriginalEl autor Harshad Ranganathan

  3. 0

    Puede ser un remanente de antes de los genéricos llegó a java (Java 4 o 5 creo).

    No necesariamente un remanente, pero sin duda una característica que no utilice medicamentos genéricos. Usted tendrá que emitir los elementos en el resultado para utilizar cuando usted los recibe.
    Sí. Parece que tenemos que cuidar de las cosas que almacenamos en el ArrayList sin medicamentos genéricos.

    OriginalEl autor ne1410s

  4. 0

    Genéricos se han añadido a solo Java en Java 5. Antes de eso, cuando se utiliza una colección, siempre ha significado una colección de objetos. La vieja sintaxis es la izquierda como es para la compatibilidad. Así ArrayList result = new ArrayList() es en realidad la creación de un ArrayList<Object>. Desde ArrayList es también un objeto, puede agregar content a la variable result.

    Tener sentido. Pero es todavía una forma popular de uso de las Colecciones sin medicamentos Genéricos en la programación diaria?
    No se recomienda para el nuevo código. Pero hay una gran cantidad de código escrito antes de Java 5 y cuando el mantenimiento de ese código o que incluso se extiende, la gente tiende a usar el viejo estilo.
    muchas gracias.

    OriginalEl autor Ravi Kiran

  5. 0

    ¿por qué utilizar ArrayList result = new ArrayList(); para crear un objeto, ya que no hemos de dar la colección de la real tipo de elemento.

    Porque java quiere es compatible con versiones anteriores. Los medicamentos genéricos es más característica del compilador para garantizar la seguridad, tipo de colecciones se pueden almacenar cualquier tipo de objeto en tiempo de ejecución.

    Compilador de Java no le dará de error del compilador, pero debe de haber dado a usted advertencia del compilador que no es apta para el uso genérico de clases sin tipo.

    OriginalEl autor Adi

Dejar respuesta

Please enter your comment!
Please enter your name here