2009-06-24 4 views
1

Попробуйте написать:Странная Java ошибка с аннотациями

List<Object> list; 
@SuppressWarnings("unchecked") 
list = (List<Object>) new Object(); 

Он потерпит неудачу на 3-й линии, на слове list, со следующим:

list cannot be resolved to a type

Я понимаю, что это связано с как работают аннотации. Кто-нибудь знает причины этого?

EDIT: спасибо за быстрый ответ. Я знал, что это сработает, если в любом случае назначение было объявлено.

ответ

2

Вы должны поместить аннотацию в декларацию, а не только в задание. Это составляет:

@SuppressWarnings("unchecked") 
List<Object> list = (List<Object>) new Object(); 

Смотрите Javadocs для SuppressWarnings, в котором перечислены свои цели, как

@Target(value={TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE}) 

И если вы посмотрите LOCAL_VARIABLE, он говорит:

Локальная переменная декларация

(Нет цели для арбитра у высказывания, так что никакие аннотаций не могли пойти туда и все еще позволяет ему собрать.)

+0

JDK7, скорее всего, добавит аннотации к общим аргументам. Не помню номер JSR с руки. –

0

аннотаций должны быть помещены на декларации, а не выражение

@SuppressWarnings("unchecked") List<Object> lst 
    = (List<Object>)getProperty("mylist"); 
list = lst; 

Если list объявлен в другом месте вы могли бы просто объявить новую локальную переменную с аннотацией подавления и выполнить назначение после этого.

1

От Солнце Annotation Tutorial:

Аннотация может быть применена к декларациям программы, в классах, полей, методов и других элементах программы.

Конец фразы «и другие элементы программы» удручающе расплывчатым, но, по словам The Java Programming Language - Annotations:

После того, как тип аннотации определяется, вы можете использовать его, чтобы комментировать объявления. Аннотирование - это особый вид модификатора и может использоваться везде, где могут использоваться другие модификаторы (такие как public, static или final). По соглашению аннотации предшествуют другим модификаторам. Аннотации состоят из знака at (@), за которым следует тип аннотации и круглые пары пар элементов и значений. Значения должны быть константами времени компиляции.

, который дает понять, что аннотации могут применяться только к объявлениям.

Смежные вопросы