es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaré un ArrayList de String por genérico, pero lo rellené de algún modo con Integer. ¿Rompió Java?

Quería llenar un ArrayList con [0..10] independientemente de si se pasaba Integer o String, y sin querer hice esto:

public class Main {
public static void main(String[] args) {
Task1 task1instance = new Task1<>();
System.out.println(task1instance.test());
}
}

public class Task1 {
ArrayList array = new ArrayList<>(10);

private void fillArray() { //Soporte de prellenado para String y Integer
for (Integer i = 0; i < 10; i++) {
array.add((T) i); //magia
}
}

ArrayList test () {
fillArray();
//smartSwap();
System.out.println(this.array.get(0).getClass());
return this.array;
}

Tengo una salida como:

class java.lang.Integer
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Pero en el main pasé un

Un ArrayList de String se llenó con Integer, pero si intentamos hacer una conversión directa, entonces tenemos un error de compilación:

Integer a = 9;
String b = (String) a; //error: Tipos incompatibles: no se puede convertir ‘java.lang.Integer’ a ‘java.lang.String’

¿Me puedes decir por favor qué sucedió realmente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Cuando pasaste un a la clase Task1, el parámetro de tipo T se estableció como String. Esto significa que el ArrayList se declaró como ArrayList. Sin embargo, al llamar a fillArray(), se convirtió i en T, que era String. Por eso obtuviste un error de compilación al intentar convertir Integer directamente en String.

    El método fillArray() pudo llenar el ArrayList con valores de Integer porque el ArrayList se declaró como ArrayList, y Integer es una subclase de String. Esto significa que el ArrayList pudo aceptar valores de Integer, aunque se declaró como ArrayList.

Comments are closed.