2010-02-17 8 views

Odpowiedz

11

adnotacje mają różne retention policies:

  • SOURCE - nie w pliku klasy, odrzucone przez kompilator (nie będzie potrzebne przy starcie)
  • klasa - w pliku klasy, ale VM może wyrzucić je Odległość
  • wykonywania - dostępny na refleksję w czasie wykonywania

Logika wskazuje, że adnotacje przechowywania źródła nie byłby potrzebny w czasie wykonywania, CLASS nie powinien być, a RUNTIME musi być dostępny pod numerem.

Szybkie spojrzenie na adnotacje JSR 305 wskazuje, że używają one zasady przechowywania RUNTIME (example), która wskazuje, że te słoiki będą rzeczywiście potrzebne do załadowania klas w czasie wykonywania w celu spełnienia umowy z adnotacją.

Ale tak naprawdę sam tego nie przetestowałem.

+1

Alex, dzięki za wskazanie mi właściwej ścieżki z adnotacjami. Mam zamiar używać tylko adnotacji edu.umd.cs.findbugs.annotations.SuppressWarnings, która ma zachowanie CLASS. Będę próbować testu w ciągu kilku następnych dni poprzez promowanie niektórych plików z adnotacjami do kompilacji i uruchomienia env. – tinman

+1

To jest niestety niepoprawne. Jak [Matt McHenry zwraca uwagę] (http://stackoverflow.com/a/3577312/1005481), te adnotacje * nie * muszą być obecne w środowisku wykonawczym. –

8

Na my related question, zwykle nie napotkasz żadnych problemów, jeśli te adnotacje nie są obecne w środowisku wykonawczym, nawet jeśli niektóre z nich mają numer @Retention(RUNTIME).

Powiązane problemy