Co powoduje, że javac wydaje ostrzeżenie "używa operacji niezaznaczonych lub niebezpiecznych"
Na przykład:
javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
7 answers
Pojawia się to w Javie 5 i później, jeśli używasz kolekcji bez specyfikacji typu (np. Arraylist()
zamiast ArrayList<String>()
). Oznacza to, że kompilator nie może sprawdzić, czy używasz kolekcji w sposób bezpieczny dla typu, używając generics .
Aby pozbyć się ostrzeżenia, po prostu sprecyzuj, jakiego typu obiekty przechowujesz w kolekcji. Więc zamiast
List myList = new ArrayList();
Użycie
List<String> myList = new ArrayList<String>();
W Javie 7 można skrócić instancję generyczną używając typu Wnioskowanie .
List<String> myList = new ArrayList<>();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 14:57:51
Jeśli zrobisz to, co sugeruje i przekompilujesz za pomocą przełącznika "-Xlint:unchecked", da ci to bardziej szczegółowe informacje.
Jak również użycie typów surowych (jak opisano w innych odpowiedziach), niezaznaczony odlew może również spowodować Ostrzeżenie.
Po skompilowaniu z-Xlint, powinieneś być w stanie przerobić kod, aby uniknąć ostrzeżenia. Nie zawsze jest to możliwe, szczególnie jeśli integrujesz się ze starszym kodem, którego nie można zmienić. W takiej sytuacji możesz zdecyduj się na wyłączenie ostrzeżenia w miejscach, w których wiesz, że kod jest poprawny:
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-13 15:48:36
To Ostrzeżenie oznacza, że Twój kod działa na surowym typie, przekompiluj przykład za pomocą
-Xlint:unchecked
Aby uzyskać szczegóły
TAK:
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 rozmowy o tym tutaj: http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-06 20:32:19
Na przykład, gdy wywołujesz funkcję, która zwraca zbiory generyczne i nie określasz parametrów generycznych.
Dla funkcji
List<String> getNames()
List names = obj.getNames();
Wygeneruje ten błąd.
Aby go rozwiązać wystarczy dodać parametry
List<String> names = obj.getNames();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-13 15:31:37
Ostrzeżenie "unchecked or unsafe operations" zostało dodane, gdy java dodała Generics , o ile dobrze pamiętam. Zazwyczaj prosi Cię o bardziej wyraźne określenie typów, w taki czy inny sposób.
Na przykład. kodArrayList foo = new ArrayList();
uruchamia to Ostrzeżenie, ponieważ javac szuka ArrayList<String> foo = new ArrayList<String>();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 02:54:48
Chcę tylko dodać jeden przykład tego rodzaju niekontrolowanego ostrzeżenia, które widzę dość często. Jeśli używasz klas, które implementują interfejs, taki jak Serializable, często wywołasz metody, które zwracają obiekty interfejsu, a nie rzeczywistą klasę. Jeśli zwracana klasa musi Zostać oddana do typu opartego na generykach, możesz otrzymać to Ostrzeżenie.
Oto krótki (i nieco głupi) przykład do zademonstrowania:
import java.io.Serializable;
public class SimpleGenericClass<T> implements Serializable {
public Serializable getInstance() {
return this;
}
// @SuppressWarnings("unchecked")
public static void main() {
SimpleGenericClass<String> original = new SimpleGenericClass<String>();
// java: unchecked cast
// required: SimpleGenericClass<java.lang.String>
// found: java.io.Serializable
SimpleGenericClass<String> returned =
(SimpleGenericClass<String>) original.getInstance();
}
}
GetInstance () zwraca obiekt implementujący Serializowalny. To musi być rzucone do rzeczywistego typu, ale to jest niezaznaczony odlew.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-07 22:12:12
Rozwiązaniem byłoby użycie określonego typu w <>
Jak ArrayList<File>
.
Przykład:
File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList filename = Arrays.asList(file);
Powyższy kod generuje ostrzeżenie, ponieważ {[4] } nie jest określonego typu.
File curfolder = new File( "C:\\Users\\username\\Desktop");
File[] file = curfolder.listFiles();
ArrayList<File> filename = Arrays.asList(file);
Powyższy kod wystarczy. Tylko zmiana jest w trzeciej linii po ArrayList
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-21 17:03:10