Рассмотрим следующий минимальный пример:
public class Test<T> {
public Test() {
Object[] arr = new Object[10];
T[] new_arr = (T[])arr;
}
}
Это выдает следующее предупреждение:
Note: Test.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Я могу перекомпилировать и посмотреть подробности о том, какие операции я не проверяю:
Test.java:5: warning: [unchecked] unchecked cast
T[] new_arr = (T[])arr;
^
required: T[]
found: Object[]
where T is a type-variable:
T extends Object declared in class Test
1 warning
Я могу подавить все непроверенные предупреждения для всего класса:
@SuppressWarnings({"unchecked"})// @SuppressWarnings("unchecked") would also work here
public class Test<T> {
public Test() {
Object[] arr = new Object[10];
T[] new_arr = (T[])arr;
}
}
Или я могу подавить предупреждения для указанного метода c, в данном случае конструктор:
public class Test<T> {
@SuppressWarnings("unchecked")//@SuppressWarnings({"unchecked"}) would also work here
public Test() {
Object[] arr = new Object[10];
T[] new_arr = (T[])arr;
}
}
В вашем случае у вас также есть объявление переменной, поэтому вам нужно сделать:
public class Test<T> {
@SuppressWarnings("unchecked")
T[] other_arr = (T[])new Object[10];
@SuppressWarnings("unchecked")
public Test() {
Object[] arr = new Object[10];
T[] new_arr = (T[])arr;
}
}
Стоит отметить, что в вашем исходном коде есть ошибки компиляции, и они должны быть устранены первыми.
Наконец, эти предупреждения существуют по причине. Вы должны постараться написать код, который их не вызывает (хотя, как это сделать, возможно, отдельный вопрос о стековом потоке).