Otros ya explicaron el problema, pero en este caso, hay una solución muy simple para ello. Simplemente abandone el elenco y su código se compilará. :):
ArrayList<ClSprite> AllSprites = savedInstanceState.getParcelableArrayList("AllSprites");
¿Por qué?
Tome un vistazo a la firma del método getParcelableArrayList
:
public <T extends Parcelable> ArrayList<T> getParcelableArrayList(String key)
Es un método genérico cuyo parámetro de tipo debe ser un hijo de Parcelable
. Si se asigna directamente a una variable de la siguiente manera:
ArrayList<ClSprite> AllSprites; // declaration somewhere
// ClSprite implements Parcelable
...
AllSprites = savedInstanceState.getParcelableArrayList("AllSprites");
el compilador puede deducir el tipo de parámetro, así que no hay necesidad del reparto en absoluto! Después de deducir, la firma se vería así:
public ArrayList<ClSprite> getParcelableArrayList(String key)
Está claro que el que no tenemos a emitir a partir ArrayList<ClSprite>
a ArrayList<ClSprite>
. :)
¿Pero por qué obtuviste este error? Si realiza un molde y no asigna la variable directamente al valor de retorno de este método, el compilador no puede deducir el parámetro tipo, solo sabe que el tipo devuelto es ArrayList<Parcelable>
. Y en este caso, el error tiene lugar lo que los otros ya explicaron.
Además, si el método no sería genérico, pero como esto:
public ArrayList<Parcelable> getParcelableArrayList(String key)
que no pudo asignar el valor devuelto a AllSprites
, porque no hay ningún tipo de deducción en absoluto, y no se puede convertir de ArrayList<Parcelable>
a ArrayList<ClSprite>
. A pesar de que tendría sentido, Java usa type erasure para genéricos, y hace estas cosas inseguras en tiempo de ejecución.
... Está bien, ¿cuál es tu pregunta ** **? –
posible duplicado de [genéricos en Java] (http://stackoverflow.com/questions/1794842/generics-in-java) – Thilo
mirada en el título, no puede emitir desde ArrayList a ArrayList –