Jaki jest cel adnotacji w Javie? Mam ten niewyraźny pomysł, że są gdzieś pomiędzy komentarzem a rzeczywistym kodem. Czy wpływają na program w czasie wykonywania?
Jakie są ich typowe zastosowania?
Czy są unikalne dla języka Java? Czy istnieje odpowiednik C ++?
java
annotations
glossary
Lehane
źródło
źródło
Odpowiedzi:
Adnotacje są używane głównie przez kod, który sprawdza inny kod. Są często używane do modyfikowania (np. Dekorowania lub pakowania) istniejących klas w czasie wykonywania, aby zmienić ich zachowanie. Struktury, takie jak JUnit i Hibernate, używają adnotacji, aby zminimalizować ilość kodu, który trzeba napisać samodzielnie, aby korzystać z tych struktur.
Oracle ma dobre wyjaśnienie tego pojęcia i jego znaczenia w Javie na swojej stronie.
źródło
Nie, ale VB i C # mają atrybuty, które są tym samym.
Ich zastosowanie jest dość zróżnicowane. Jeden typowy przykład języka Java
@Override
nie ma wpływu na kod, ale może zostać użyty przez kompilator do wygenerowania ostrzeżenia (lub błędu), jeśli dekorowana metoda w rzeczywistości nie przesłania innej metody. Podobnie metody można oznaczyć jako przestarzałe.Potem jest refleksja. Kiedy odzwierciedlasz typ klasy w swoim kodzie, możesz uzyskać dostęp do atrybutów i działać zgodnie z znalezionymi tam informacjami. Nie znam żadnych przykładów w Javie, ale w .NET jest to używane przez kompilator do generowania (de) informacji o serializacji dla klas, określania układu pamięci struktur i deklarowania importu funkcji ze starszych bibliotek (między innymi). Kontrolują również sposób działania projektanta formularzy IDE.
/ EDIT: Atrybuty w klasach są porównywalne z interfejsami tagów (jak Serializable w Javie). Jednak wytyczne dotyczące kodowania .NET mówią, aby nie używać interfejsów znaczników. Ponadto działają tylko na poziomie klasy, a nie na poziomie metody.
źródło
Anders podaje dobre podsumowanie, a oto przykład adnotacji JUnit
W tym miejscu
@Test
adnotacja mówi JUnit, żeflatfileMissing
metoda jest testem, który powinien zostać wykonany i że oczekiwany wynik jest wyrzuconyIOException
. Dlatego po uruchomieniu testów ta metoda zostanie wywołana, a test zakończy się pomyślnie lub zakończy się niepowodzeniem w zależności od tego, czyIOException
zostanie zgłoszony.źródło
Java ma również narzędzie do przetwarzania adnotacji (apt), w którym nie tylko tworzysz adnotacje, ale także decydujesz, jak te adnotacje mają działać w kodzie źródłowym.
Oto wprowadzenie.
źródło
Aby zobaczyć fajne rzeczy, które możesz zrobić z adnotacjami, sprawdź moje adnotacje JavaBean i procesor adnotacji .
Świetnie nadają się do generowania kodu, dodawania dodatkowych walidacji podczas kompilacji, a także używam ich do obsługi komunikatów o błędach (jeszcze niepublikowane - trzeba to wyjaśnić z szefami ...).
źródło
Zgodnie z definicją dosłowną adnotacja dodaje uwagi do elementu. Podobnie adnotacje Java to tagi, które wstawiamy do kodu źródłowego w celu dostarczenia dodatkowych informacji o kodzie. Adnotacje Java wiążą informacje z elementem programu z adnotacjami. Oprócz adnotacji w języku Java, programy w języku Java zawierają wiele nieformalnej dokumentacji, która jest zwykle zawarta w komentarzach w pliku kodu źródłowego. Ale adnotacje w języku Java różnią się od komentarzy, które bezpośrednio opisują elementy programu przy użyciu typów adnotacji do opisania formy adnotacji. Adnotacje Java przedstawiają informacje w standardowy i ustrukturyzowany sposób, tak aby można je było łatwo wykorzystać przez narzędzia przetwarzające.
Aby zapoznać się ze szczegółami, istnieje ładny samouczek dotyczący adnotacji w języku Java
źródło
Kiedy używasz adnotacji @Override w Javie i dlaczego? Odnośnik odnosi się do pytania, kiedy należy użyć adnotacji zastępowania (@override). Może to pomóc lepiej zrozumieć koncepcję adnotacji. Sprawdź.
źródło
Adnotacje, jeśli chodzi o EJB, są znane jako wybór niejawnego podejścia do oprogramowania pośredniego zamiast jawnego podejścia do oprogramowania pośredniego, kiedy używasz adnotacji, dostosowujesz dokładnie to, czego potrzebujesz od API, na przykład musisz wywołać metodę transakcji dla przelewu bankowego : bez użycia adnotacji: kod będzie
podczas korzystania z adnotacji, twój kod nie zawiera uciążliwych wywołań API do korzystania z usług pośrednictwa. Kod jest czysty i skoncentrowany na logice biznesowej
źródło