Pitanja za intervju s Java Annotations (+ odgovori)
• Pitanja o intervjuu za sustav tipa Java
• Pitanja za intervju s Java-om (+ odgovori)
• Struktura Java razreda i pitanja za intervju za inicijalizaciju
• Java 8 pitanja za intervju (+ odgovori)
• Upravljanje memorijom u Java intervjuu Pitanja (+ odgovori)
• Pitanja o intervjuu za Java Generics (+ odgovori)
• Pitanja za intervju s Java Flow Control (+ odgovori)
• Pitanja o intervjuu za iznimke Java (+ odgovori)
• Pitanja za intervju s Java Annotations (+ odgovori) (trenutni članak) • Najpopularnija proljetna okvirna pitanja za intervju
1. Uvod
Bilješke postoje od Jave 5, a danas su sveprisutni programski konstrukti koji omogućuju obogaćivanje koda.
U ovom ćemo članku pregledati neka pitanja u vezi s napomenama; koji se često traže na tehničkim intervjuima i, gdje je to prikladno; implementirat ćemo primjere kako bismo bolje razumjeli njihove odgovore.
2. Pitanja
Q1. Što su bilješke? Koji su tipični slučajevi njihove upotrebe?
Bilješke su metapodaci vezani za elemente izvornog koda programa i nemaju utjecaja na rad koda kojim upravljaju.
Njihovi tipični slučajevi upotrebe su:
- Informacije za sastavljača - s napomenama, sastavljač može otkriti pogreške ili suzbiti upozorenja
- Obrada vremena kompilacije i vremena implementacije - softverski alati mogu obrađivati napomene i generirati kod, konfiguracijske datoteke itd.
- Runtime obrada - napomene se mogu ispitati tijekom izvođenja kako bi se prilagodilo ponašanje programa
Q2. Opišite neke korisne napomene iz standardne knjižnice.
Postoji nekoliko napomena u java.lang i java.lang.notacija paketi, najčešći uključuju, ali nisu ograničeni na:
- @Preuzmi - označava da je metoda namijenjena nadjačavanju elementa deklariranog u superklasi. Ako ne uspije pravilno nadjačati metodu, kompajler će izdati pogrešku
- @Deprecated - označava da je element zastario i da ga se ne smije koristiti. Prevoditelj će izdati upozorenje ako program koristi metodu, klasu ili polje označeno ovom bilješkom
- @SuppressWarnings - govori sastavljaču da suzbije određena upozorenja. Najčešće se koristi prilikom povezivanja s naslijeđenim kodom napisanim prije pojave generičkih lijekova
- @FunctionalInterface - uveden u Javi 8, označava da je deklaracija tipa funkcionalno sučelje i čija se implementacija može pružiti pomoću Lambda izraza
Q3. Kako možete stvoriti bilješku?
Bilješke su oblik sučelja u kojem je ključna riječ sučelje prethodi @, a čije tijelo sadrži element tipa bilješke deklaracije koje izgledaju vrlo slično metodama:
public @interface SimpleAnnotation {Vrijednost niza (); int [] tipovi (); }
Nakon što je napomena definirana, yon je može početi koristiti kroz vaš kôd:
@SimpleAnnotation (value = "element", type = 1) element javne klase {@SimpleAnnotation (value = "atribut", type = {1, 2}) javni element nextElement; }
Imajte na umu da, kada pružate više vrijednosti za elemente niza, morate ih priložiti u zagrade.
Po želji se zadane vrijednosti mogu pružiti sve dok su konstantni izrazi kompajleru:
public @interface SimpleAnnotation {String value () default "Ovo je element"; int [] tipovi () zadani {1, 2, 3}; }
Anotaciju sada možete koristiti bez tih elemenata:
@SimpleAnnotation element javne klase {// ...}
Ili samo neki od njih:
@SimpleAnnotation (value = "atribut") javni element nextElement;
Q4. Koje se tipove objekata mogu vratiti iz izjave metode bilježenja?
Tip povrata mora biti primitivan, Niz, Razred, Enumili niz jednog od prethodnih tipova. U suprotnom, kompajler će izbaciti pogrešku.
Evo primjera koda koji uspješno slijedi ovo načelo:
enum Složenost {LOW, HIGH} public @interface ComplexAnnotation {Vrijednost klase (); int [] tipovi (); Složenost složenosti (); }
Sljedeći primjer neće uspjeti sastaviti od Objekt nije valjana vrsta povrata:
public @interface FailingAnnotation {Složenost objekta (); }
P5. Koji se programski elementi mogu označiti?
Bilješke se mogu primijeniti na nekoliko mjesta u cijelom izvornom kodu. Mogu se primijeniti na deklaracije klasa, konstruktora i polja:
@SimpleAnnotation javna klasa Apply {@SimpleAnnotation private String aField; @SimpleAnnotation public Apply () {// ...}}
Metode i njihovi parametri:
@SimpleAnnotation public void aMethod (@SimpleAnnotation String param) {// ...}
Lokalne varijable, uključujući petlju i varijable resursa:
@SimpleAnnotation int i = 10; za (@SimpleAnnotation int j = 0; j <i; j ++) {// ...} pokušajte (@SimpleAnnotation FileWriter Writer = getWriter ()) {// ...} catch (Exception ex) {// .. .}
Ostale vrste bilješki:
@SimpleAnnotation public @interface ComplexAnnotation {// ...}
Pa čak i paketi, putem package-info.java datoteka:
@PackageAnnotation paket com.baeldung.interview.annotations;
Od Jave 8 oni se mogu primijeniti i na koristiti vrsta. Da bi ovo funkcioniralo, napomena mora navesti @Cilj bilješka s vrijednošću ElementType.USE:
@Target (ElementType.TYPE_USE) public @interface SimpleAnnotation {// ...}
Sada se napomena može primijeniti na stvaranje instance klase:
novi @SimpleAnnotation Apply ();
Tipski odljevci:
aString = (@SimpleAnnotation String) nešto;
Klauzula o provedbi:
javna klasa SimpleList implementira @SimpleAnnotation List {// ...}
I baca klauzula:
void aMethod () baca izuzetak @SimpleAnnotation {// ...}
P6. Postoji li način da se ograniče elementi u kojima se bilješka može primijeniti?
Da, @Cilj U tu se svrhu može koristiti bilješka. Ako pokušavamo upotrijebiti bilješku u kontekstu u kojem ona nije primjenjiva, sastavljač će izdati pogrešku.
Evo primjera za ograničavanje upotrebe @SimpleAnnotation napomena samo za deklaracije polja:
@Target (ElementType.FIELD) public @interface SimpleAnnotation {// ...}
Možemo proslijediti više konstanti ako ga želimo učiniti primjenjivim u više konteksta:
@Target ({ElementType.FIELD, ElementType.METHOD, ElementType.PACKAGE})
Možemo čak i napraviti bilješku tako da se ona ne može koristiti za bilo što. Ovo može dobro doći kada su deklarirani tipovi namijenjeni isključivo za upotrebu kao tip člana u složenim bilješkama:
@Target ({}) public @interface NoTargetAnnotation {// ...}
P7. Što su meta-bilješke?
Jesu li napomene koje se primjenjuju na ostale napomene.
Sve bilješke koje nisu označene @Cilj, ili su njime označeni, ali uključuju ANOTACIJA_TIP konstanta su i meta-bilješke:
@Target (ElementType.ANNOTATION_TYPE) public @interface SimpleAnnotation {// ...}
P8. Što su ponavljajuće bilješke?
To su napomene koje se mogu primijeniti više puta na istu deklaraciju elementa.
Iz razloga kompatibilnosti, otkad je ova značajka uvedena u Javi 8, ponavljajuće se bilješke pohranjuju u bilješka spremnika koji automatski generira Java kompajler. Da bi prevodilac to učinio, dva su koraka da ih deklariraju.
Prvo, moramo proglasiti ponovljivu napomenu:
@Repeatable (Schedules.class) public @interface Schedule {String time () default "morning"; }
Zatim definiramo napomenu koja sadrži obvezno vrijednost element, a čiji tip mora biti niz ponavljajućeg tipa bilješke:
public @interface Schedules {Schedule [] value (); }
Sada @Schedule možemo koristiti više puta:
@Schedule @Schedule (time = "afternoon") @Schedule (time = "night") void rasporedMethod () {// ...}
P9. Kako možete dobiti bilješke? Kako se ovo odnosi na njegovu politiku zadržavanja?
Da biste preuzeli napomene, možete upotrijebiti API za refleksiju ili procesor napomena.
The @Zadržavanje bilješka i njezina RetentionPolicy parametar utječe na način na koji ih možete dohvatiti. Postoje tri konstante u RetentionPolicy nabrajanje:
- RetentionPolicy.IZVOR - čini da napomena odbaci kompajler, ali ih obrađivači napomena mogu pročitati
- RetentionPolicy.CLASS - označava da je napomena dodana u datoteku razreda, ali da joj nije moguće pristupiti refleksijom
- RetentionPolicy.RUNTIME –Annotacije bilježi u datoteku klase prevodilac, a JVM zadržava u vrijeme izvođenja tako da ih se može reflektirano čitati
Evo primjera koda za stvaranje napomene koja se može čitati tijekom izvođenja:
@Retention (RetentionPolicy.RUNTIME) public @interface Opis {String value (); }
Anotacije se sada mogu dobiti refleksijom:
Opis opisa = AnnotatedClass.class.getAnnotation (Description.class); System.out.println (description.value ());
Procesor napomena može raditi s RetentionPolicy.IZVOR, to je opisano u članku Java Annotation Processing and Creating Builder.
RetentionPolicy.CLASS je korisno kada pišete Java parser bytecode.
Q10. Hoće li se sastaviti sljedeći kod?
@Target ({ElementType.FIELD, ElementType.TYPE, ElementType.FIELD}) public @interface TestAnnotation {int [] value () default {}; }
Ne. To je pogreška vremena kompajliranja ako se ista enum konstanta pojavi više puta u @Cilj bilješka.
Uklanjanjem duplikata konstante učinit će da se kod uspješno prevede:
@Target ({ElementType.FIELD, ElementType.TYPE})
Q11. Je li moguće proširiti bilješke?
Ne. Bilješke se uvijek protežu java.lang.annotation.Anotacija, kako je navedeno u Specifikaciji jezika Java.
Ako pokušamo koristiti proteže se klauzule u deklaraciji napomena, dobit ćemo pogrešku pri kompilaciji:
public @interface AnAnnotation proširuje OtherAnnotation {// Pogreška kompilacije}
Zaključak
U ovom smo članku pokrili neka od često postavljanih pitanja koja se pojavljuju u tehničkim intervjuima za programere Java u vezi s napomenama. Ovo nikako nije iscrpan popis i treba ga smatrati samo početkom daljnjeg istraživanja.
Mi iz tvrtke Baeldung želimo vam uspjeh u svim nadolazećim intervjuima.
Sljedeći » Najpopularnija pitanja za proljetni okvirni intervju « Prethodna pitanja o intervjuima za iznimke Java (+ odgovori)