Аннотации Java: при инициализации переменной, но не при назначении?

У меня возникли проблемы с пониманием того, где именно должна или может быть размещена аннотация.

Класс с этим методом компилируется, но выдает предупреждение «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

Мне кажется, что проблема здесь в том, что аннотации могут использоваться специально для переменных, но только тогда, когда они объявлены; любые последующие назначения не будут охвачены аннотацией. Это верно? Есть ли более элегантное решение, чем подавление непроверенных предупреждений для всего метода?

5
задан G. Bach 8 December 2011 в 03:14
поделиться