Вопрос-ответ

What causes javac to issue the "uses unchecked or unsafe operations" warning

Что заставляет javac выдавать предупреждение "использует непроверенные или небезопасные операции"

Например:

javac Foo.java
Note: Foo.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Переведено автоматически
Ответ 1

Это появляется в Java 5 и более поздних версиях, если вы используете коллекции без спецификаторов типов (например, Arraylist() вместо ArrayList<String>()). Это означает, что компилятор не может проверить, используете ли вы коллекцию типобезопасным способом, используя дженерики.

Чтобы избавиться от предупреждения, вам нужно уточнить, какой тип объектов вы храните в коллекции. Итак, вместо

List myList = new ArrayList();

использование

List<String> myList = new ArrayList<String>();

В Java 7 вы можете сократить общее создание экземпляра, используя вывод типа.

List<String> myList = new ArrayList<>();
Ответ 2

Если вы сделаете то, что он предлагает, и перекомпилируете с помощью параметра "-Xlint: непроверенный", это даст вам более подробную информацию.

Помимо использования необработанных типов (как описано в других ответах), непроверенное приведение также может вызвать предупреждение.

После компиляции с помощью -Xlint вы сможете переработать свой код, чтобы избежать предупреждения. Это не всегда возможно, особенно если вы интегрируетесь с устаревшим кодом, который нельзя изменить. В этой ситуации вы можете решить отключить предупреждение в тех местах, где вы знаете, что код правильный:

@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
Ответ 3

Для Android Studio вам необходимо добавить:

allprojects {

gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked"
}
}

// ...
}

в файле build.gradle вашего проекта, чтобы узнать, откуда возникла эта ошибка.

Ответ 4

Это предупреждение означает, что ваш код работает с необработанным типом, перекомпилируйте пример с

-Xlint:unchecked 

чтобы узнать подробности

вот так:

javac YourFile.java -Xlint:unchecked

Main.java:7: warning: [unchecked] unchecked cast
clone.mylist = (ArrayList<String>)this.mylist.clone();
^
required: ArrayList<String>
found: Object
1 warning

docs.oracle.com рассказывает об этом здесь:
http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html

java generics