Какие причины javac для издания “использования неконтролируемые или небезопасные операции” предупреждение

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

267
задан sepp2k 8 March 2019 в 10:44
поделиться

6 ответов

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

, Чтобы избавиться от предупреждения, просто быть конкретным относительно того, какие объекты Вы храните в наборе. Так, вместо

List myList = new ArrayList();

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

List<String> myList = new ArrayList<String>();
<час>

В Java 7 можно сократить универсальное инстанцирование при помощи Вывод типа .

List<String> myList = new ArrayList<>();
372
ответ дан Bill the Lizard 23 November 2019 в 02:22
поделиться

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

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

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

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}
186
ответ дан Dan Dyer 23 November 2019 в 02:22
поделиться

например, когда Вы вызываете функцию, которая возвращает Универсальные наборы, и Вы не определяете универсальные параметры сами.

для функции

List<String> getNames()


List names = obj.getNames();

генерирует эту ошибку.

Для решения его Вы просто добавили бы параметры

List<String> names = obj.getNames();
5
ответ дан Matt 23 November 2019 в 02:22
поделиться

"Или небезопасные операции непроверенные" предупреждение были добавлены, когда Java добавил Дженерики , если я помню правильно. Это обычно просит, чтобы Вы были более явными о типах, так или иначе.

, Например. код ArrayList foo = new ArrayList(); триггеры, что предупреждение, потому что javac ищет ArrayList<String> foo = new ArrayList<String>();

5
ответ дан Srinu Babu Ruppa 23 November 2019 в 02:22
поделиться

Вы можете сохранить его в общей форме и записать в виде:

// list 2 is made generic and can store any type of Object
        ArrayList<Object> list2 = new ArrayList<Object>();

Установка типа ArrayList в качестве объекта дает нам преимущество для хранения любого типа данных. Вам не нужно использовать -Xlint или что-то еще.

0
ответ дан 23 November 2019 в 02:22
поделиться

У меня были 2-летние классы и некоторые новые классы. Я решил его в Studio Android следующим образом:

allprojects {

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

}

В моем проекте build.gradle файл ( решение Borzh)

И затем если некоторый Metheds покидают:

@SuppressWarnings("unchecked")
public void myMethod()
{
    //...
}
2
ответ дан 23 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: