如何避免在此示例中使用“-xLint:unchecked”重新编译

时间:2015-10-16 10:06:24

标签: java

当我编写课程时,我会收到以下警告:

  

注意:JSONLoader.java使用未经检查或不安全的操作

     

注意:使用-xLint重新编译:未选中

课程简单如下:

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(取决于文件的内容),这些对象类型是不兼容的。

1 个答案:

答案 0 :(得分:1)

问题在于,使用您的方法可以使用JSONObject x = loader.loads(filename),文件实际上会返回JSONArray。在您的情况下,T的类型是从返回值的赋值推断出来的,此信息将在运行时丢失。

我说你最好添加两种方法,将两种类型中的一种定义为返回值并检查文件内容是否匹配(你可以用你的方法做到这一点,因为你可以& #39; 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()等等。)。 p>