En Java, es una buena práctica utilizar tipos de interfaz en lugar de clases concretas en las API.
Tu problema es que estás usando ArrayList (probablemente en muchos lugares) donde realmente deberías usar List. Como resultado, se creó problemas con la restricción innecesaria de que la lista es unaArrayList .
Así es como debería verse su código:
List input = new ArrayList(...);
public void doSomething(List input) {
List inputA = input.subList(0, input.size()/2);
...
}
this.doSomething(input);
Su "solución" propuesta al problema fue / es la siguiente:
new ArrayList(input.subList(0, input.size()/2))
Eso funciona haciendo una copia de la sublista. No es una tajada en el sentido normal. Además, si la sublista es grande, realizar la copia será costoso.
Si está limitado por las API que no puede cambiar , de modo que debe declarar inputAcomo una ArrayList, es posible que pueda implementar una subclase personalizada de ArrayListen la que el subListmétodo devuelve una subclase deArrayList . Sin embargo:
- Sería mucho trabajo diseñar, implementar y probar.
- Ahora ha agregado una nueva clase significativa a su base de código, posiblemente con dependencias de aspectos no documentados (y por lo tanto "sujetos a cambios") aspectos del
ArrayList clase.
- Debería cambiar los lugares relevantes en su base de código donde está creando
ArrayList instancias para crear instancias de su subclase en su lugar.
La solución "copiar la matriz" es más práctica ... teniendo en cuenta que estos no son cortes verdaderos.
ArrayList? Creo que puede carecer de un poco de comprensión de cómo funcionan porque las interfacesListyArrayListno son “incompatibles” -ArrayListimplementosList, yListprobablemente contiene todos los métodos necesarios que necesita.