2015-10-16 32 views
0

當我編譯我的課,我得到這些警告:如何避免「用-Xlint重新編譯:選中」在這個例子中

注:JSONLoader.java使用未經檢查或不安全的操作

注:重新編譯用-Xlint:未選中

類是爲simples:

class JSONLoader<T>{ 
    public T loads(String file_name){ 
     JSONParser parser = new JSONParser(); 
     Object obj = null; 
     try{ 
      obj = parser.parse(new FileReader(file_name)); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return (T) obj; 
    } 
} 

我應該補充說,這個類應該返回JSONObjectJSONArray(取決於文件的內容),並且這些對象類型是不兼容的。

+0

最簡單的方法是壓制警告。 – Thomas

+0

@Thomas。我不喜歡壓制警告) – Jacobian

回答

1

問題是,用你的方法,你可以使用JSONObject x = loader.loads(filename),該文件實際上返回JSONArray。在你的情況下,T的類型是從返回值的賦值中推斷出來的,這些信息在運行時會丟失。

我想說你最好添加兩個方法,將兩種類型中的一種定義爲返回值,並檢查文件內容是否匹配(因爲無法確定類型的T)。

實施例:

JSONObject loadObject(String filename) { 
    ... 

    Object obj = parser.parse(xxx); 
    if(obj instanceof JSONObject) { 
    return (JSONObject)obj; 
    } 
    else { 
    throw new IllegalArgumentException("json root is not a single object"); 
    } 
} 

JSONArray loadArray(String filename) { 
    //similar to above 
} 

可替代地,例如如果你想要一個方法,你可以創建一個允許兩種類型之一的包裝(例如通過構造函數重載)並將檢查放入該包裝中(或者提供諸如isArray()等)。

+0

謝謝,先生! – Jacobian

相關問題