“使用未经检查或不安全的操作”
为什么每次编译时都会出现“使用未经检查或不安全的操作”错误? 代码有什么问题? 我复制了本教程中完全相同的代码http://www.mkyong.com/java/json-simple-example-read-and-write-json/
import java.io.FileWriter; import java.io.IOException; import org.json.JSONArray; import org.json.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); } }
当您执行Java编译器认为缺少错误检查的代码或以某种方式可能不安全的代码时,将显示uses unsafe or unchecked operations
警告。 但是,这是一个警告,而不是错误,并且不会阻止您的代码编译 – 大型项目通常会在警告后生成警告,您可以自由决定是否值得采取行动。 如果您想深入了解导致警告触发的内容,可以使用语法javac -Xlint:unchecked yourfilename.java
重新编译.java
文件javac -Xlint:unchecked yourfilename.java
,编译器将为您提供更详细的信息,说明导致错误的确切原因。
根据我的经验,这种警告通常可以通过使用像ArrayList这样的东西而不指定它应该保持的类型(即使用ArrayList a = new ArrayList()
而不是ArrayList
)。 在我的示例中,编译器警告您,您的代码不会检查您添加到它的值是否为任何特定类型。 在生产应用程序中,指定类型可能会很好,但在测试应用程序中,如果您不关心它们,则可以自由地忽略警告。
通常在构建generics类时会获得未经检查的强制转换,例如:
// Here we have unchecked cast warning ArrayList arr = (ArrayList ) obj;// obj is of type Object
防止这种情况并使强制转换安全的一种方法是扩展强制转换的类型,然后使用自定义类型扩展,如下所示:
// your class extends generic but is not generic class MyClass extends ArrayList { } //then change your cast like this: MyClass arr = (MyClass) obj;//here we have NO warning for unchecked cast
- 手动降级9.0.83 Google Play服务以避免DynamiteModule:无法加载模块描述符
- 如何在HttpURLConnection中添加AsyncTask?
- SimpleDateFormat解析日期在某些Android设备上有所不同
- 不在AsyncTask的onPostExecute中设置Activity的实例变量或如何将数据从AsyncTask返回到主UI线程
- 如何将UTF字符串转换为ANSI并使用JAVA-ANDROID在SSD中创建ANSI文本文件
- 关于Postfix Increment Operator ++的澄清:java
- toString方法
- Android java.util.Calendar – 时差
- 在java中有任何函数,其行为类似于来自c的getopt