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
- 'Private static final' miembro de la clase de prueba de unidad de Android cambia el valor a null
- Android escribe en la carpeta de la tarjeta sd
- BadTokenException: No se puede agregar la ventana
- Optimizar las asignaciones de java
- Error: Error de ejecución para la tarea ': app: mergeDebugResources'. > Se ha producido un error en el procesamiento de archivos, vea los registros para obtener detalles.
"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"
- Guardar un ImageView en la Galería - El código no funciona
- ¿Cómo puedo habilitar las pestañas de la barra de acciones en un fragmento?
- Obteniendo java.io.IOException: se ha producido un error en la lectura, el socket puede estar cerrado o el tiempo de espera en BluetoothSocket.connect ()
- Biblioteca de Compatiblity de Android Proguard
- ¿Dónde puedo descargar JDK 1.6u20 de 64 bits?
- Android Google Maps v2 no muestra el icono Compass and Location
- Notificando un solo hilo: notify, notifyAll o concurrent.locks.Condition?
- Consumir API de intercambio de pilas
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
- No se pudo encontrar la propiedad 'aild' en el conjunto de fuentes principal
- Wrappable TextView con SpannableStringBuilder y ImageSpan esconde la última imagen en cada línea