Анотация SOURCE Политика за задържане

От документа на Java:

КЛАС: Анотациите трябва да се записват във файла на класа от компилатора, но не е необходимо да се запазват от VM по време на изпълнение.

ВРЕМЕ НА ИЗПЪЛНЕНИЕ: Анотациите трябва да се записват във файла на класа от компилатора и да се запазват от VM по време на изпълнение, така че да могат да се четат отразяващо.

ИЗТОЧНИК: Анотациите трябва да бъдат отхвърлени от компилатора.

Разбирам употребите на RUNTIME (за да използвам анотация с отражение) и CLASS (за компилатора), но не разбирам кога може да бъде полезно да се използва

@Retention(RetentionPolicy.SOURCE)

Можеш ли да обясниш?


person JohnJohnGa    schedule 08.11.2011    source източник


Отговори (2)


Неща като @SuppressWarnings, @Override са анотации, използвани от компилатора - не са необходими по време на изпълнение. За тези RetentionPolicy.SOURCE би имало смисъл. Също така анотациите могат да се използват за генериране на код (вижте Spring ROO) - такива анотации също не са необходими по време на изпълнение.

person gkamal    schedule 08.11.2011
comment
а защо не RetentionPolicy.CLASS? - person JohnJohnGa; 08.11.2011
comment
+1: Някои анотации, използвани от компилатора, са запазване на КЛАСА. - person Peter Lawrey; 08.11.2011
comment
Те не са необходими в ByteCode (във файла .class). - person gkamal; 08.11.2011
comment
@JohnJohnGa, Компилаторът се нуждае само от анотациите SuppressWarnings и Override за кода, който компилира незабавно. Отхвърленото трябва да бъде CLASS или RUNTIME, тъй като може да доведе до предупреждение в код, компилиран по-късно (който го използва) - person Peter Lawrey; 08.11.2011
comment
Понякога създавам SOURCE анотации като задачи, проблеми, клопки или просто напомняния. Мога да избера да пиша процесори за него или да го търся в IDE - person nabster; 31.10.2019

Този отговор има идеален смисъл - https://stackoverflow.com/a/43910948/3009968.

Не бихте искали да включите зависимост, желаните ефекти от която се реализират дори преди кодът да бъде компилиран. напр. @SuppressWarnings

Не бихте искали да включите зависимост, която се използва от компилатора, да кажем, за генериране на код, но изобщо не е необходима по време на изпълнение. напр. както вече беше споменато в предишния отговор -spring roo.

person Manojkumar Khotele    schedule 11.10.2019