2014-05-20 64 views
11

爲什麼我每次編譯時都會收到「使用未檢查或不安全的操作」錯誤?代碼有什麼問題?我從本教程http://www.mkyong.com/java/json-simple-example-read-and-write-json/「使用未經檢查或不安全的操作」

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

這是一個警告,而不是一個錯誤。這真的沒關係。它來自哪條線? –

+1

看起來像'org.json.simple'庫不是通用的。 'JSONArray'類擴展了一個未參數化的'ArrayList',這可能是警告來自的地方。 –

回答

23

當你執行Java編譯器將考慮到缺乏的錯誤檢查,或以某種方式可能不安全的代碼顯示uses unsafe or unchecked operations警告複製完全相同的代碼。但是,這是一個警告,而不是一個錯誤,並且不會阻止編譯代碼 - 大型項目在警告後經常會產生警告,並且您可以自由決定是否值得采取行動。如果您想深入瞭解導致警告觸發的原因,您可以使用語法javac -Xlint:unchecked yourfilename.java重新編譯.java文件,編譯器會爲您提供有關導致錯誤的詳細信息。

根據我的經驗,這種警告通常可能是由於使用類似於ArrayList的東西,而沒有指定它應該預期的類型(即使用ArrayList a = new ArrayList()而不是ArrayList<String> a = new ArrayList<String>())。在我的示例中,編譯器會警告您,您的代碼不會對您進行任何檢查,您添加的值是任何特定類型。在生產應用程序中,指定類型可能會很好,但在測試應用程序中,如果您不關心它們,則可以自由忽略警告。

相關問題