Добавить @SuppressWarnings ( "unchecked" ) в generics для одной строки генерирует ошибку компилятора eclipse
Я наткнулся на странное поведение, которое я не понимаю.
Мне нужно передать String в общий файл и вызывать предупреждение.
Type safety : Unchecked cast from String to T
-
Если я добавлю @SuppressWarnings("unchecked")
выше объявления метода
он отлично работает.
-
Если я добавлю его выше назначения, он выдает ошибку компилятора в
затмевать.
Это отлично работает.
@SuppressWarnings("unchecked")
public <T> T search(final String query){
T returnValue = null;
...
if(returnValue instanceof String){
returnValue = (T) collection.getString(attrName);
}
Это не работает нормально.
public <T> T search(final String query){
T returnValue = null;
...
if(returnValue instanceof String){
@SuppressWarnings("unchecked") // Compiler error: "returnValue cannot be resolved to a type"
returnValue = (T) collection.getString(attrName);
}
Любая идея, что вызывает несоответствие между двумя способами подавления предупреждения?
Ответы
Ответ 1
У вас не может быть аннотации к произвольным выражениям (возможно, позже они будут добавлены позже).
Однако вы можете добавлять аннотации к объявлениям локальных переменных.
Так что компилятор пытается здесь сделать, это интерпретировать returnValue
как тип (как единственное, что может следовать за аннотацией внутри тела метода) и терпит неудачу.
Вложение аннотации в объявление returnValue
в этом случае не помогает. Однако вы можете создать новую локальную переменную, в которой вы выполняете листинг в инициализаторе и комментируете это.
@SuppressWarnings("unchecked")
T string = (T) collection.getString(attrName);
returnValue = string;