"использует непроверенные или небезопасные операции"

Почему я получаю ошибку "использует неконтролируемые или небезопасные операции" каждый раз, когда компилирую? Что не так с кодом? Я скопировал тот же самый код из этого учебника 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);

     }

}

Ответ 1

Предупреждение uses unsafe or unchecked operations отображается при выполнении кода, который, по мнению компилятора Java, отсутствует при проверке ошибок или каким-то образом небезопасным. Тем не менее, это предупреждение, а не ошибка, и не будет препятствовать компиляции вашего кода. Крупные проекты часто будут предупреждать об ошибке после предупреждения, и вы можете определить, стоит ли их принимать меры или нет. Если вы хотите углубиться в то, что вызывает предупреждение, вы можете перекомпилировать ваш файл .java с синтаксисом javac -Xlint:unchecked yourfilename.java, а компилятор предоставит вам более подробную информацию о том, что именно вызывает ошибку.

В моем опыте это предупреждение часто может быть вызвано использованием чего-то вроде ArrayList без указания типа, который он должен ожидать удерживать (т.е. используя ArrayList a = new ArrayList(), а не ArrayList<String> a = new ArrayList<String>()). Компилятор, в моем примере, предупреждает вас, что ваш код не собирается проверять вас, что значения, которые вы добавляете к нему, - это любой конкретный тип. В производственном приложении, вероятно, было бы хорошо указать типы, но в тестовом приложении вы можете игнорировать предупреждения, если вас это не беспокоит.