2014-05-20 11 views
11

Dlaczego otrzymuję komunikat "używa niezaznaczonych lub niebezpiecznych operacji" za każdym razem, gdy kompiluję? Co jest nie tak z kodem? Skopiowałem dokładnie ten sam kod z tego poradnika http://www.mkyong.com/java/json-simple-example-read-and-write-json/"używa niezaznaczonych lub niebezpiecznych operacji"

import java.io.FileWriter; 
import java.io.IOException; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 

public class JsonSimpleExample { 
    public static void main(String[] args) { 

    JSONObject obj = new JSONObject(); 
    obj.put("name", "mkyong.com"); 
    obj.put("age", new Integer(100)); 

    JSONArray list = new JSONArray(); 
    list.add("msg 1"); 
    list.add("msg 2"); 
    list.add("msg 3"); 

    obj.put("messages", list); 

    try { 

     FileWriter file = new FileWriter("c:\\test.json"); 
     file.write(obj.toJSONString()); 
     file.flush(); 
     file.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    System.out.print(obj); 

    } 

} 
+3

To ostrzeżenie, a nie błąd. To naprawdę nie ma znaczenia. Z jakiej linii pochodzi? –

+1

Wygląda na to, że biblioteka 'org.json.simple' nie jest generyczna. Klasa 'JSONArray' rozszerza niezaanalizowaną tablicę' ArrayList', która prawdopodobnie pochodzi od ostrzeżeń. –

Odpowiedz

23

Ostrzeżenie uses unsafe or unchecked operations jest wyświetlany podczas wykonywania kodu, który kompilator Java uważa za pozbawione Sprawdzanie błędów lub potencjalnie niebezpieczne w jakiś sposób. Jest to jednak ostrzeżenie, a nie błąd, i nie powstrzyma to kompilacji kodu - duże projekty często generują ostrzeżenie po ostrzeżeniu, a Ty możesz zdecydować, czy warto podejmować działania, czy nie. Jeśli chcesz zagłębić się w to, co wywołuje ostrzeżenie, możesz przekompilować swój plik .java za pomocą składni javac -Xlint:unchecked yourfilename.java, a kompilator poda bardziej szczegółowe informacje o tym, co dokładnie powoduje błąd.

Z mojego doświadczenia wynika, że ​​to ostrzeżenie często może być spowodowane użyciem czegoś takiego jak ArrayList bez określania typu, który powinien się utrzymywać (tj. Z użyciem ArrayList a = new ArrayList() zamiast ArrayList<String> a = new ArrayList<String>()). W moim przypadku kompilator ostrzega, że ​​twój kod nie sprawdzi, czy wartości, które do niego dodajesz, są szczególnym typem. W aplikacji produkcyjnej dobrze byłoby określić typy, ale w aplikacji testowej możesz zignorować ostrzeżenia, jeśli nie masz na nie wpływu.

Powiązane problemy