当我编写课程时,我会收到以下警告:
注意: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;
}
}
我应该补充一点,这个类应该返回JSONObject
或JSONArray
(取决于文件的内容),这些对象类型是不兼容的。
答案 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>