Другое событие 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));
}
Это подходит в Java 5 и позже при использовании наборов без спецификаторов типа (например, Arraylist()
вместо ArrayList<String>()
). Это означает, что компилятор не может проверить использование набора безопасным с точки зрения типов способом, с помощью дженерики .
, Чтобы избавиться от предупреждения, просто быть конкретным относительно того, какие объекты Вы храните в наборе. Так, вместо
List myList = new ArrayList();
использование
List<String> myList = new ArrayList<String>();
<час> В Java 7 можно сократить универсальное инстанцирование при помощи Вывод типа .
List<String> myList = new ArrayList<>();
Если Вы сделаете то, что это предлагает, и перекомпилируйте с переключателем "-Xlint:unchecked", это даст Вам более подробную информацию.
, А также использование необработанных типов (как описано другими ответами), бросок непроверенный может также вызвать предупреждение.
, Как только Вы скомпилировали с-Xlint, необходимо быть в состоянии переделать код для предотвращения предупреждения. Это не всегда возможно, особенно если Вы интегрируетесь с унаследованным кодом, который не может быть изменен. В этой ситуации можно решить подавить предупреждение в местах, где Вы знаете, что код корректен:
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}
например, когда Вы вызываете функцию, которая возвращает Универсальные наборы, и Вы не определяете универсальные параметры сами.
для функции
List<String> getNames()
List names = obj.getNames();
генерирует эту ошибку.
Для решения его Вы просто добавили бы параметры
List<String> names = obj.getNames();
"Или небезопасные операции непроверенные" предупреждение были добавлены, когда Java добавил Дженерики , если я помню правильно. Это обычно просит, чтобы Вы были более явными о типах, так или иначе.
, Например. код ArrayList foo = new ArrayList();
триггеры, что предупреждение, потому что javac ищет ArrayList<String> foo = new ArrayList<String>();
Вы можете сохранить его в общей форме и записать в виде:
// list 2 is made generic and can store any type of Object
ArrayList<Object> list2 = new ArrayList<Object>();
Установка типа ArrayList в качестве объекта дает нам преимущество для хранения любого типа данных. Вам не нужно использовать -Xlint или что-то еще.
У меня были 2-летние классы и некоторые новые классы. Я решил его в Studio Android следующим образом:
allprojects {
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked"
}
}
}
В моем проекте build.gradle файл ( решение Borzh)
И затем если некоторый Metheds покидают:
@SuppressWarnings("unchecked")
public void myMethod()
{
//...
}