У меня возникли проблемы с пониманием, где именно или где должна быть размещена аннотация.
Класс с помощью этого метода компилируется, но выдает предупреждение «unchecked»:
<B extends BitSet> void doStuff(LinkedList<B> list) {
B board = list.getFirst();
B cloneBoard;
cloneBoard = (B) board.clone(); //unchecked
}
Это компилируется без предупреждения:
<B extends BitSet> void doStuff(LinkedList<B> list) {
B board = list.getFirst();
@SuppressWarnings("unchecked")
B cloneBoard = (B) board.clone();
}
Это не компилируется, но помечает cloneBoard с ошибкой:
<B extends BitSet> void doStuff(LinkedList<B> 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
Мне кажется,проблема в том, что аннотации могут специально использоваться для переменных, но только тогда, когда они объявлены;любое последующее назначение не будет охватываться аннотацией.Это правильно?Есть ли более элегантное решение, чем подавление непроверенных предупреждений для всего метода?