¿Pueden las matrices contener elementos genéricos?
Los tipos genéricos y las matrices pueden interactuar de manera diferente en Java. Considere el siguiente código:
ArrayList a = new ArrayList();
Este código se compila exitosamente, creando una ArrayList genérica llamada a. Sin embargo, el siguiente código no se puede compilar:
ArrayList[] a = new ArrayList[10];
¿Por qué ocurre esto? Parece que las matrices y los genéricos son incompatibles. Para entender esto, exploremos el borrado de tipos en Java.
Borrado de tipos: detrás de escena
Cuando Java se compila, realiza el borrado de tipos, que reemplaza la información de tipos genérica con tipos sin formato (Objeto). Esto evita errores como colocar una cadena en una ArrayList de enteros. Sin embargo, las matrices requieren un tipo sin formato y los genéricos no se pueden representar como tipos sin formato.
Solucionar el problema de la matriz
Para crear una matriz de elementos genéricos, puede explícitamente convierta la matriz al tipo deseado:
ArrayList[] a = (ArrayList[]) new ArrayList[10];
Esta conversión instruye al compilador que la matriz debe considerarse una matriz de ArrayLists con elementos clave.
Lista de listas: la excepción
En Java, una lista de listas no se considera una matriz . Por lo tanto, el siguiente código se compila sin conversión de tipos:
ArrayList> b = new ArrayList>();
Esta distinción surge porque ArrayList es un tipo que no es de matriz.
Conclusión
Las matrices y los tipos genéricos tienen limitaciones en Java debido al borrado de tipos. Sin embargo, al convertir explícitamente matrices al tipo genérico deseado o usar listas de listas, se pueden sortear estas limitaciones y usar tipos genéricos de manera efectiva en ambos contextos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3