У меня возникли проблемы с пониманием того, где именно должна или может быть размещена аннотация.
Класс с этим методом компилируется, но выдает предупреждение «unchecked»:
void doStuff(LinkedList list) {
B board = list.getFirst();
B cloneBoard;
cloneBoard = (B) board.clone(); //unchecked
}
Это компилируется без предупреждения:
void doStuff(LinkedList list) {
B board = list.getFirst();
@SuppressWarnings("unchecked")
B cloneBoard = (B) board.clone();
}
Это не компилируется, но помечает cloneBoard ошибкой:
void doStuff(LinkedList list) {
B board = list.getFirst();
B cloneBoard;
@SuppressWarnings("unchecked")
cloneBoard = (B) board.clone(); // cloneBoard cannot be resolved to a type;
// VariableDeclaratorID expected
}
В учебнике Sun по аннотациям , Я не смог найти ответа, почему это так: http://docs.oracle.com/javase/tutorial/java/javaOO/annotations.html .
Определение грамматики мне тоже не помогло, поскольку я не совсем уверен, что понимаю его правильно: http://java.sun.com/docs/books/jls/third_edition/html/syntax. html # 18.1
Мне кажется, что проблема здесь в том, что аннотации могут использоваться специально для переменных, но только тогда, когда они объявлены; любые последующие назначения не будут охвачены аннотацией. Это верно? Есть ли более элегантное решение, чем подавление непроверенных предупреждений для всего метода?