Anotácie Java Dotazy na rozhovor (+ odpovede)
• Dotazy týkajúce sa systému typu Java
• Otázky týkajúce sa rozhovorov o súbehu Java (+ odpovede)
• Otázky týkajúce sa štruktúry triedy Java a inicializácie
• Otázky týkajúce sa rozhovoru s Java 8 (+ odpovede)
• Správa pamäte v otázkach týkajúcich sa rozhovorov Java (+ odpovede)
• Java Generics Interview otázky (+ odpovede)
• Otázky týkajúce sa riadenia toku Java (+ odpovede)
• Otázky týkajúce sa rozhovorov o výnimkách jazyka Java (+ odpovede)
• Anotácie Java Dotazy na rozhovor (+ odpovede) (aktuálny článok) • Najlepšie otázky týkajúce sa jarného rámcového rozhovoru
1. Úvod
Anotácie existujú už od Javy 5 a v dnešnej dobe sú to všadeprítomné programovacie konštrukty, ktoré umožňujú obohatenie kódu.
V tomto článku preskúmame niektoré otázky týkajúce sa anotácií; ktoré sa často pýtajú na technických pohovoroch a prípadne; implementujeme príklady, aby sme lepšie pochopili ich odpovede.
2. Otázky
Q1. Čo sú anotácie? Aké sú ich typické prípady použitia?
Anotácie sú metadáta viazané na prvky zdrojového kódu programu a nemajú žiadny vplyv na činnosť kódu, ktorý prevádzkujú.
Ich typické prípady použitia sú:
- Informácie pre prekladateľa - s anotáciami môže kompilátor zistiť chyby alebo potlačiť varovania
- Spracovanie v čase kompilácie a nasadenia - softvérové nástroje môžu spracovávať anotácie a generovať kód, konfiguračné súbory atď.
- Spracovanie za behu - anotácie je možné preskúmať za behu a prispôsobiť tak správanie programu
Q2. Popíšte niektoré užitočné poznámky zo štandardnej knižnice.
V dokumente je niekoľko anotácií java.lang a java.lang.annotácia Medzi najbežnejšie balíčky patria okrem iného:
- @Override - označuje, že metóda je určená na prepísanie prvku deklarovaného v nadtriede. Ak sa nepodarí správne prepísať metódu, kompilátor vydá chybu
- @ Zastarané - označuje, že prvok je zastaraný a nemal by sa používať. Kompilátor vydá varovanie, ak program použije metódu, triedu alebo pole označené touto anotáciou
- @SuppressWarnings - povie prekladaču, aby potlačil konkrétne varovania. Najčastejšie sa používa pri prepojení so starým kódom napísaným pred objavením generík
- @Funkčné rozhranie - zavedené v prostredí Java 8, naznačuje, že deklarácia typu je funkčné rozhranie a ktorého implementáciu je možné zabezpečiť pomocou výrazu Lambda
Q3. Ako môžete vytvoriť anotáciu?
Anotácie sú formou rozhrania, v ktorom sa nachádza kľúčové slovo rozhranie pred ním je @, a ktorého telo obsahuje prvok typu anotácie vyhlásenia, ktoré vyzerajú veľmi podobne ako metódy:
public @interface SimpleAnnotation {String value (); typy int [] (); }
Po definovaní anotácie ju môže yon začať používať prostredníctvom vášho kódu:
@SimpleAnnotation (value = "an element", types = 1) public class Element {@SimpleAnnotation (value = "an attribute", types = {1, 2}) public Element nextElement; }
Upozorňujeme, že pri zadávaní viacerých hodnôt pre prvky poľa ich musíte uviesť v zátvorkách.
Predvolené hodnoty môžu byť poskytnuté, pokiaľ sú konštantnými výrazmi pre kompilátor:
public @interface SimpleAnnotation {Reťazcová hodnota () predvolené "Toto je prvok"; int [] typy () predvolené {1, 2, 3}; }
Teraz môžete použiť anotáciu bez týchto prvkov:
@SimpleAnnotation verejná trieda Element {// ...}
Alebo iba niektoré z nich:
@SimpleAnnotation (value = "atribút") public Element nextElement;
Q4. Aké typy objektov je možné vrátiť z vyhlásenia metódy anotácie?
Návratový typ musí byť primitívny, String, Trieda, Enumalebo pole jedného z predchádzajúcich typov. V opačnom prípade kompilátor vyhodí chybu.
Tu je príklad kódu, ktorý úspešne dodržiava tento princíp:
enum Complexity {LOW, HIGH} public @interface ComplexAnnotation {Class value (); typy int [] (); Zložitosť zložitosť (); }
Nasledujúci príklad sa odvtedy nepodarí zostaviť Objekt nie je platný typ vrátenia:
public @interface FailingAnnotation {zložitosť objektu (); }
Q5. Ktoré prvky programu je možné anotovať?
Poznámky možno v celom zdrojovom kóde použiť na niekoľkých miestach. Môžu byť použité na deklarácie tried, konštruktorov a polí:
Verejná trieda @SimpleAnnotation Použiť {@SimpleAnnotation private String aField; @SimpleAnnotation public Použiť () {// ...}}
Metódy a ich parametre:
@SimpleAnnotation public void aMethod (@SimpleAnnotation String param) {// ...}
Lokálne premenné vrátane premenných slučky a zdrojov:
@SimpleAnnotation int i = 10; for (@SimpleAnnotation int j = 0; j <i; j ++) {// ...} try (@SimpleAnnotation FileWriter writer = getWriter ()) {// ...} catch (Exception ex) {// .. .}
Ďalšie typy anotácií:
@SimpleAnnotation public @interface ComplexAnnotation {// ...}
A dokonca aj balíčky prostredníctvom balíček-info.java spis:
Balíček @PackageAnnotation com.baeldung.interview.annotations;
Od verzie Java 8 sa dajú použiť aj na server použitie typov. Aby to fungovalo, musí anotácia uvádzať znak @ Cieľ anotácia s hodnotou ElementType.USE:
@ Cieľ (ElementType.TYPE_USE) verejné @ rozhranie SimpleAnnotation {// ...}
Teraz možno anotáciu použiť na vytvorenie inštancie triedy:
new @SimpleAnnotation Apply ();
Typ odliatkov:
aString = (@SimpleAnnotation String) niečo;
Doložka o implementácii:
verejná trieda SimpleList implementuje zoznam @SimpleAnnotation {// ...}
A hodí doložka:
void aMethod () vyvolá výnimku @SimpleAnnotation {// ...}
Q6. Existuje spôsob, ako obmedziť prvky, v ktorých je možné použiť anotáciu?
Áno @ Cieľ na tento účel možno použiť anotáciu. Ak sa pokúsime použiť anotáciu v kontexte, kde ju nie je možné použiť, kompilátor vydá chybu.
Tu je príklad na obmedzenie používania súboru @SimpleAnnotation anotácia iba k poľným vyhláseniam:
@ Cieľ (ElementType.FIELD) verejné @ rozhranie SimpleAnnotation {// ...}
Ak chceme zaistiť, aby bolo použiteľné vo viacerých kontextoch, môžeme odovzdať viac konštánt:
@Target ({ElementType.FIELD, ElementType.METHOD, ElementType.PACKAGE})
Môžeme dokonca vytvoriť anotáciu, aby ju nebolo možné použiť na anotáciu čohokoľvek. To sa môže hodiť, keď sú deklarované typy určené výhradne na použitie ako typ člena v komplexných anotáciách:
@Target ({}) public @interface NoTargetAnnotation {// ...}
Q7. Čo sú meta-anotácie?
Sú anotácie použiteľné pre iné anotácie.
Všetky anotácie, ktoré nie sú označené @ Cieľ, alebo sú ním označené, ale zahŕňajú ANNOTATION_TYPE konštanty sú aj metaanotácie:
@ Cieľ (ElementType.ANNOTATION_TYPE) verejné @ rozhranie SimpleAnnotation {// ...}
Q8. Čo sú opakujúce sa poznámky?
Jedná sa o anotácie, ktoré možno na deklaráciu toho istého prvku použiť viackrát.
Z dôvodu kompatibility, pretože táto funkcia bola predstavená v prostredí Java 8, sú opakujúce sa anotácie uložené v a anotácia kontajnera ktorý je automaticky generovaný kompilátorom Java. Aby to kompilátor urobil, musí ich deklarovať dvoma krokmi.
Najskôr musíme deklarovať opakovateľnú anotáciu:
@Repeatable (Schedules.class) public @interface Schedule {String time () predvolené "ráno"; }
Potom definujeme obsahujúcu anotáciu s povinným hodnotu prvok a ktorého typ musí byť pole typu opakovateľnej anotácie:
public @interface Schedules {Schedule [] value (); }
Teraz môžeme program @Schedule použiť viackrát:
@Schedule @Schedule (time = "odpoledne") @Schedule (time = "night") void scheduledMethod () {// ...}
Q9. Ako môžete načítať anotácie? Ako to súvisí s jeho politikou zadržiavania?
Na načítanie anotácií môžete použiť Reflection API alebo anotačný procesor.
The @ Zadržanie anotácia a jej Retenčná politika parameter ovplyvňuje, ako ich môžete načítať. V systéme sú tri konštanty Retenčná politika enum:
- RetentionPolicy.SOURCE - vytvorí anotáciu, ktorú má kompilátor zahodiť, ale anotačné procesory ju môžu prečítať
- RetentionPolicy.CLASS - označuje, že anotácia je pridaná do súboru triedy, ale nie je prístupná odrazom
- RetentionPolicy.RUNTIME –Anotácie sú zaznamenané v súbore triedy kompilátorom a uchované JVM za behu, aby ich bolo možné čítať reflexne
Tu je príklad kódu na vytvorenie anotácie, ktorú je možné prečítať za behu programu:
@Retention (RetentionPolicy.RUNTIME) public @interface Description {String value (); }
Teraz je možné poznámky získať pomocou reflexie:
Description description = AnnotatedClass.class.getAnnotation (Description.class); System.out.println (description.value ());
S procesorom anotácií je možné pracovať RetentionPolicy.SOURCE, je to popísané v článku Spracovanie anotácií Java a vytvorenie Builderu.
RetentionPolicy.CLASS je použiteľné, keď píšete syntaktický analyzátor bajtových kódov Java.
Q10. Bude sa kompilovať nasledujúci kód?
@Target ({ElementType.FIELD, ElementType.TYPE, ElementType.FIELD}) public @interface TestAnnotation {int [] hodnota () predvolené {}; }
Nie. Je to chyba kompilácie, ak sa rovnaká konštanta enum objaví viac ako raz v an @ Cieľ anotácia.
Odstránenie duplicitnej konštanty spôsobí úspešné zostavenie kódu:
@Target ({ElementType.FIELD, ElementType.TYPE})
Q11. Je možné rozšíriť anotácie?
Nie. Poznámky sa vždy rozširujú java.lang.annotation.Annotation, ako je uvedené v špecifikácii jazyka Java.
Ak sa pokúsime použiť predlžuje klauzula v deklarácii anotácie, dostaneme chybu kompilácie:
public @interface AnAnnotation rozširuje OtherAnnotation {// Chyba kompilácie}
Záver
V tomto článku sme sa venovali niektorým z často kladených otázok týkajúcich sa anotácií, ktoré sa vyskytujú v technických rozhovoroch pre vývojárov Java. Toto v žiadnom prípade nie je vyčerpávajúci zoznam a mal by sa považovať iba za začiatok ďalšieho výskumu.
My v Baeldungu vám prajeme úspech v akýchkoľvek nadchádzajúcich rozhovoroch.
Ďalšie » Najlepšie otázky týkajúce sa jarného rámcového rozhovoru « Predchádzajúce otázky týkajúce sa výnimiek z jazyka Java (+ odpovede)