Java cómo manejar "Cast no verificado" para Array <MyItem> desde el objeto

En mi proyecto de Android he hecho una clase de AsyncTask abstracta en la que ingreso la URL y si es necesario la información de paginación, así que no necesito seguir escribiendo el material de HTTP, etc.

He hecho un método abstracto, onAsyncTaskResult (Object o) que debe ser implementado en el uso. Sin embargo, cuando se echa en el objeto apropiado (puede ser de diferentes tipos) el IDE me da una advertencia

"Unchecked cast for java.lang.Object to java.util.ArrayList<com.company.package.subpackage.MyItem>"

Aquí está mi fragmento de código de la implementación de dicha función

 new SuperCoolAsyncTask() { @Override protected void onAsyncTaskResult(Object o) { if(o instanceof ArrayList) { //generates warning in the following line AppConstants.scoreStatistics = (ArrayList<MyItem>)o; } } }.execute(get_url_score_statistics()); 

¿Cómo se supone que puedo emitir esto a un ArrayList<MyItem> sin generar una advertencia?

Sin la declaración <MyItem> una "asignación no comprobada"

No puedes hacerlo sin una advertencia. Estás lanzando un Object a otra clase, e incluso si el Object es una instancia de ArrayList no sabes que es de tipo genérico.

Actualizar:

si escribió SuperCoolAsyncTask mismo SuperCoolAsyncTask , podría parametrizar la clase con genéricos:

 public abstract class SuperCoolAsyncTask<ResultType> { protected abstract void onAsyncTaskResult(ResultType o); } 

Y luego, cuando invoca su código:

 new SuperCoolAsyncTask<ArrayList<MyItem>>() { @Override protected void onAsyncTaskResult(ArrayList<MyItem> o) { AppConstants.scoreStatistics = o; } }.execute(get_url_score_statistics()); 

No puede evitar la advertencia, pero puede ocultarla con una anotación de @SuppressWarnings . Prueba esto:

 new SuperCoolAsyncTask() { @Override @SuppressWarnings("unchecked") protected void onAsyncTaskResult(Object o) { if(o instanceof ArrayList) { //generates warning in the following line AppConstants.scoreStatistics = (ArrayList<MyItem>)o; } } }.execute(get_url_score_statistics()); 

La otra opción, si estás realmente preocupado por la seguridad de tipo, es dejar el genérico no especificado (es decir, sólo se emite a ArrayList, no ArrayList y, a continuación, desplaza cada elemento a medida que lo eliminas.

Puede enviar su objeto a ArrayList. no puede emitirlo a su tipo

  • Biblioteca .jar de Android dentro de la biblioteca .jar - Dependencias anidadas
  • Diferencia entre FlurryAgent.logEvent y FlurryAgent.onEvent
  • No se puede iniciar AVD en el emulador. Estudio androide
  • Smack lanza "NoClassDefFoundError: Resolución fallida de: Lorg / jxmpp / util / XmppStringUtils"
  • Error al resolver: Error: (23, 17) junit: junit: 4.12 en android studio 1.4
  • InflateException: Línea de archivo XML binario # 1: Error de inflar clase <unknown> causada por OutOfMemoryError
  • Copiar directorios y archivos de la carpeta res / raw a la tarjeta sd - android
  • Andengine: destinguish entre OnAreaTouched y OnSceneTouched
  • Obtención de elementos secundarios de LinearLayout
  • Android Get Keys de preferences.xml
  • Jmdns registra en la interfaz IPv4, pero transmite IPv6
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.