Imagen de título

Alerta Coder #1 – toList() no puede castearse a ArrayList

Hoy hemos tenido un problema, que casi sale a producción, a causa del método toList().

Imaginemos que queremos meter en el bundle de nuestro fragment una lista de Parcelable. Esto no suele ser muy común, pero puede darse el caso de que lo necesites. Sabes que, para ello, los bundles disponen de un método llamado putParcelableArrayList(), que recibe un ArrayList. Pero el parámetro que recibimos es de tipo List. ¿Cómo convertiríamos un List en un ArrayList?

Esto es un error, ya que el método toList(), como su propio nombre indica, devuelve un tipo List, pero no garantiza que la implementación de List que está haciendo sea un ArrayList. De hecho, puede ser de tipo:

  • EmptyList cuando la lista sobre la que lo llamas no tiene elementos.
  • SingletonList, cuando la lista tiene un único elemento
  • ArrayList cuado tiene más de uno.

Y ni EmptyList ni SingletonList son subtipos de ArrayList.

¿Cómo hay que hacerlo?

Pues como se ha hecho de toda la vida: pasándole la lista al constructor de ArrayList.

¡Y cuidado con que data no sea nulo! Este constructor admite nulos por su platform type, pero si prestamos atención a su implementación, recibir un nulo hará que nuestra aplicación se detenga.

Otras Alertas Coder

0 Comentarios

Contesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

©2020 Codictados Comunidad libre para el aprendizaje de codigo Online

o

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

o

Create Account