java generic - ¿Qué hace que javac emita la advertencia "usa operaciones no verificadas o no seguras"?




4 Answers

Esto aparece en Java 5 y Arraylist() posteriores si está utilizando colecciones sin especificadores de tipo (por ejemplo, Arraylist() lugar de ArrayList<String>() ). Significa que el compilador no puede verificar que está usando la colección de una manera segura para el tipo, usando generics .

Para deshacerse de la advertencia, solo especifique qué tipo de objetos está almacenando en la colección. Entonces, en lugar de

List myList = new ArrayList();

utilizar

List<String> myList = new ArrayList<String>();

En Java 7, puede acortar la creación de instancias genéricas utilizando Inferencia de tipos .

List<String> myList = new ArrayList<>();
generics wildcards

Por ejemplo:

javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.



Esta advertencia significa que su código opera en un tipo en bruto, vuelva a compilar el ejemplo con el

-Xlint:unchecked 

para obtener los detalles

Me gusta esto:

javac YourFile.java -Xlint:unchecked

Main.java:7: warning: [unchecked] unchecked cast
        clone.mylist = (ArrayList<String>)this.mylist.clone();
                                                           ^
  required: ArrayList<String>
  found:    Object
1 warning

docs.oracle.com habla de esto aquí: http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html




La advertencia de "operaciones no seleccionadas o no seguras" se agregó cuando Java agregó Generics , si recuerdo correctamente. Por lo general, te pide que seas más explícito sobre los tipos, de una forma u otra.

Por ejemplo. el código ArrayList foo = new ArrayList(); activa esa advertencia porque javac está buscando ArrayList<String> foo = new ArrayList<String>();




La solución sería utilizar un tipo específico en <> como ArrayList<File> .

ejemplo:

File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList filename = Arrays.asList(file);

El código anterior genera una advertencia porque ArrayList no es de un tipo específico.

File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList<File> filename = Arrays.asList(file);

El código anterior lo hará bien. Sólo el cambio está en la tercera línea después de ArrayList .




Related