2011-03-05 15 views
14

Me estoy poniendo un "Tipo de seguridad : Desactivada fundido del objeto a ArrayList" de advertencia en la línea con readObject(), en este fragmento de código:advertencia de descarte sin marcar: ¿cómo evitar esto?

// Read the Event List 
theEventArrayList = new ArrayList<Event>();   
String FILENAME = "EventData.dat"; 
FileInputStream fis; 
try { 
    fis = openFileInput(FILENAME); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    theEventArrayList = (ArrayList<Event>) ois.readObject(); 
    fis.close(); 
} 

Event es una clase simple compuesta de algunas cadenas, calendarios, booleanos y entradas. El ArrayList se escribe utilizando un ObjectOutputStream en una operación de imagen especular a la anterior. La aplicación en la que se usa este código se ejecuta muchas veces al día durante más de un mes sin fallas, pero la advertencia del compilador me molesta y no quiero simplemente suprimirla si puede "verificarse" correctamente.

+0

¿Por qué no quiere suprimirlo? Aparentemente estás seguro de que es perfectamente legal, así que cierra el compilador :) Los hacks/workarounds solo harían que el código sea menos sostenible. – BalusC

Respuesta

25

Suprimirlo. Su única otra alternativa es realizar un envío a ArrayList, pero luego, en cualquier otro lugar del código, tiene que tratar con ArrayList sin tipo y con la opción de leer. No hay daño en suprimir en esta situación.

4

Bueno, el compilador ES correcto, ¿quién dice que el objeto que está leyendo realmente es un ArrayList? Podría reemplazar fácilmente el archivo con algo completamente diferente y obtendría una excepción.

Object obj = ois.readObject(); 
if (obj instanceof ArrayList) 
    // do something 
else 
    // Error 

debería funcionar. Y sí, todavía recibirás una advertencia por el genérico, pero ese es el sistema genérico de Java, deshacerse de eso significaría crear un nuevo objeto y agregar un Evento a la vez, bueno, pero luego tendríamos que lanzar Objetos a Eventos y ... argh, no no mejor, solo vive con la advertencia genérica.

1

Vieja, pero mi respuesta original es "Tengo aquí por Google".

Si desea evitarlo y no está realmente gravado con la CPU o RAM limitaciones, puede intentar Collections.copy

Cuestiones relacionadas