2010-03-23 10 views
5

Estoy tratando de limpiar algunas advertencias en algún código antiguo de Java (en Eclipse), y no estoy seguro de qué es lo que hay que hacer en este caso. El bloque se ve más o menos así:¿Cuál es la forma correcta de resolver la advertencia de Eclipse "no está parametrizada"?

Transferable content = getToolkit().getSystemClipboard().getContents(null); 
java.util.List clipboardFileList = null; 

if(content.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { 
    try { 
    clipboardFileList = (java.util.List)content.getTransferData(
     DataFlavor.javaFileListFlavor); 
    } 
    /* Do other crap, etc. */ 
} 

la lista genera una advertencia, ya que no es parametrizada, sin embargo, si parametrizar con <File>, que estoy bastante seguro de que es lo que se requiere, se queja que no puede convertir de Object a List<File>. Podría simplemente suprimir la advertencia sin marcar para la función, pero preferiría evitar eso si hay una solución "buena". ¿Pensamientos?

+0

Entonces getTransferData() devuelve un objeto? –

+0

Whoops, omite la línea que dice qué contenido es. – Morinar

Respuesta

6

recomendaría fundición de forma explícita el resultado de List<File> y la supresión de la advertencia. De acuerdo con the documentation:

public static final DataFlavor javaFileListFlavor

Para transferir una lista de archivos a/desde Java (y la plataforma subyacente) un DataFlavor de este tipo/subtipo y clase de representación de java.util.List se utiliza. Se requiere/garantiza que cada elemento de la lista sea del tipo java.io.File.

En una situación de este tipo, donde la documentación define claramente el tipo de datos, no dude en hacer caso omiso de las advertencias, según artículo 24 de Joshua Bloch Effective Java (página 116):

Si no puede elimine una advertencia, y puede probar que el código que provocó la advertencia es seguro, entonces (y solo entonces) suprima la advertencia con una anotación @SuppressWarnings("unchecked").

+0

Eso tiene sentido para mí y la dirección a la que me inclinaba. Solo curiosidad por si había una solución "mejor". – Morinar

+0

@Morinar: Comprensible. El propósito de la respuesta fue ofrecer la justificación de un experto (Joshua Bloch) detrás de su decisión. :) –

4

probar este

java.util.List<?> 
+0

Eso parece hacer el truco. ¿Que meramente diciéndole que no sé cuál es el tipo? ¿O es más complicado que eso? – Morinar

+2

@Morinar, hace un poco más: dice que la lista es de un tipo específico, que se desconoce, mientras que el tipo sin procesar significa que es una lista que puede contener elementos de diferentes tipos (y por lo tanto no es segura). –

0

no creo que es necesario utilizar <?>. Esto solo funciona bien para mi?

Object obj = null; 
List<File> aa = (List<File>)obj; 
+0

Lo siento, no estaba claro. No es que no pueda hacerlo, es que se trata de un "Lanzamiento no verificado de un objeto a la lista ". – Morinar

+0

Oh. Lo siento, uso IDEA y no dio ninguna advertencia. –

Cuestiones relacionadas