Java annotációk

A Java programozási nyelvben annotációnak olyan nyelvi elemet nevezünk, amely lehetővé teszi a metaadatok beépítését forráskódba.[1] Az anotációkat a Java 5.0-s verziójánál vezették be. Az annotációk a programkód elemeihez rendelhetők (csomagokhoz, típusokhoz, metódusokhoz, attribútumokhoz, konstruktorokhoz, lokális változókhoz), plusz információt hordoznak a Java fordító ill. speciális eszközök számára.

Az annotáció @ jellel kezdődik, majd ehhez kapcsolódik a neve. Esetenként vesszővel elválasztva követheti a nevet egy paraméterlista, amelyet kerek zárójelbe foglalunk. Például a következő forráskód-részletben a „deprecated” annotáció megelőzi az A osztályt:

@Deprecated
public class A {}

Az annotáció-processzor egy olyan fordítóprogram-plugin, amely az annotációt a fordításnál kielemzi, és ezzel figyelmeztetéseket és hibajelentéseket nyomhat el, illetve válthat ki, vagy további forráskódokat vagy más adatokat generálhat. Viszont annotációval ellátott kódokat nem tud megváltoztatni. Azok az annotációk, amelyeknél ezt figyelembe vették, futási időben is kielemezhetők a reflexió segítségével.

Az annotációt többek között a Java EE környezetben is használják, hogy osztályokat olyan információkkal bővíthessenek, amelyeket a Java 5-ös verziója előtt külön kellett feltüntetni.

Fontos példák erre például a home és local interfészek, valamint a deployment descriptorok.

A metaadatok speciális Javadoc-kommentekkel is beépíthetőek a forráskódba. Ezek úgynevezett Docletek segítségével értékelhetőek ki. A leggyakrabban használt ilyen eszköz az XDoclet. Ezt a módszert az annotáció bevezetése után továbbra is lehet alkalmazni.

Előre definiált annotációfajták

A Java SE 5.0-ban 7 előre definiált annotációtípus létezik, melyek a java.lang vagy java.lang.annotation csomagokban találhatók. Ellentétben a legtöbb annotációval, mindegyik fordítással értékelhető ki. Továbbiakat magunk hozhatunk létre.

A java.lang csomagban található annotációk

@Deprecated

Olyan osztályokat, attribútumokat vagy metódusokat lehet vele jelölni, amelyeket már nem javasolt felhasználni. Ha egy ilyen elem kerül használatba, a fordító figyelmeztetést küld.

Ajánlott egy plusz Javadoc-komment elhelyezése, ami feltünteti, hogy az adott elemet milyen módon lehet helyettesíteni. Példa:

/**
 * @deprecated  Az A osztály használatát a 10.3-as verziótól az Anew osztály váltja ki.
 */
@Deprecated
public class A {}

@Override

Ezzel olyan metódust jelzünk, amely a metódus egyik ősosztályának egyik metódusát írja felül. Ebben az esetben a fordítóprogram ellenőrzi, hogy az ősosztály tartalmazza-e a metódust. Amennyiben nem, akkor hibajelzést küld. Pl:

public class A {
    public void method() {}
}
 
public class B extends A {
    @Override
    public void method() {}
}

@SuppressWarnings

Ez az annotáció a fordítóprogram bizonyos hibaüzeneteit/figyelmeztetéseit tiltja le. Az annotáció paramétere a letiltandó figyelmeztetések nevét tartalmazó tömb. Pl:

public class A {
    @SuppressWarnings({"deprecation"})
    public void method() {
        DeprecatedClass b = new DeprecatedClass();
    }
}

A java.lang.annotation csomagban található annotációk

Ezeket csak az annotáció definiálására lehet használni.

@Documented

Ezt az annotációt meta-annotációként alkalmazzuk: ez biztosítja, hogy az újonnan létrehozott annotációk a javadoc dokumentációba is bekerüljenek.

@Inherited

Annotációk annotálására alkalmazzák. Ezzel biztosíthatjuk, hogy a saját annotációnkat egy adott osztály örökölje. Az öröklődés kiterjed az alosztályokra is.

@Retention

Ezt a típust is annotációk annotálására alkalmazzák. Megadja, hogy mikor hivatkozhat önmagára. 3 lehetséges értéke lehet, amelyek a java.lang.annotation.retentionPolicy enumerációjában jelennek meg:

  • Class
  • Runtime
  • Source

@Target

Ezt is annotációk annotálására használják. Megmutatja, hogy a program mely elemeire alkalmazható. Az annotáció értékei a java.lang.annotation.ElementType enumerációban érhető el.

  • Type: Csak osztályokra, interfészekre vagy enumerációkra alkalmazható
  • Method: Csak metódusokra alkalmazható
  • Annotation_Type: Csak annotációkra alkalmazható

Saját annotáció definiálása

Az annotációk speciális kapcsolódási pontok, ezért a nevüket nagybetűvel írjuk. A specifikáció alapján az interface előtt @ jel áll. Implicit bővítik a java.lang.annotation.Annotation kapcsolódási pontjait. Más kapcsolódási pontot nem bővíthetnek (vagyis tiltott az extends), és nem generikusak. A metódusaik paraméter nélküliek és nem generikusak. Visszatérési típusként (return type) csak a következő típusok megengedettek:

  • primitív típusok
  • felsorolási típusok
  • annotáció típusok
  • string
  • class
  • felsorolások (tömbök) ezekből a típusokból

Nem dobhatnak kivételt és nem lehetnek rekurzívak. Sok annotáció nem tartalmaz metódusokat.

@interface Template { }

Más annotációk, ahogy más kapcsolódási pontoknál jellemző, metódusokat tartalmaznak, de csak az előbb felsorolt visszatérési típusúakat. Ha egy annotáció csak egy mezőt tartalmaz, akkor neve a konvencióknak megfelelően "value".

@interface Test {
        boolean value();
}

vagy

@interface Author {
        String[] value(); // szerző neve
}

vagy

@interface Costumer {
        Person[] value();
}

amelynél a személyt felsorolási típusként (enum) vagy annotációként kell definiálni. Pl:

@interface Person {
        String name();
        int age();
}

Az annotációk konvencióinál gyakran a java.lang.annotation csomagból választják ki a standard annotációkat. Különösen a @Retention-nel kell feltüntetni, hogy meddig tartsák meg az annotációkat: csak a forrásszövegben (source), a tárolt class-adatoknál (class) vagy a betöltött osztályoknál (runtime). @Target jelzi, hogy melyik programelemeknél használhatóak az annotációk. Például az összes java.lang.annotation csomagban található annotáció a

@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)

annotációkkal van ellátva. Ezek a bájtkódba betölthetők, és futási idő alatt kiértékelhetőek, továbbiakban csak annotációtípusokként használhatóak.

Saját annotációk felhasználása

Egy metódus annotáció nélkül mint pl. a @Template, egy osztály elé állítható:

@Template
class SampleClass {
        void sampleMethod(); 
}

Ha az eredménytípus felsorolás, akkor felsorolási literálokat kell alkalmazni:

@Author({"Szerző 1", "Szerző 2"})
String book = "Könyv"

Ha a felsorolás nem tartalmaz elemeket akkor ({}) jellel kell jelezni. De ha csak egy elemet tartalmaz, akkor elhagyhatjuk a belső zárójeleket:

@Author("Szerző")
String anotherBook = "Könyv"

Ha egy annotáció több metódussal rendelkezik, akkor mindegyiknél zárójelben hozzá kell rendelni egy konstans értéket:

@Person(name = "Név", age = 30)
Bill bill = new Bill();

Az annotációknál is van egy módszer, amelyekkel az értéket a névnél meg lehet adni (felesleges, csak olvashatóbb)

@Test(value = true)

Egy komplex annotációt egymásba ágyazva kell alkalmazni.

@Costumer(@Person(name = "Név", age = 30))
class Company {  }

Az annotációknál a metódusoknak kezdőértékeket határozhatunk meg, ekkor felhasználásnál elhagyhatjuk a megfelelő értékek megadását. Mivel az annotációk kapcsolódási pontok, ezért önmaguk annotációval is megjelölhetőek.

@Author("Szerző")
public @interface Test {
        boolean buy() default false; // érték nélkül is hívható 
}

Annotációk kiértékelése

Ha az annotáció az osztály bájtkódjának segítségével betölthető, akkor a reflexió segítségével kiértékelhető. Például megállapítható, hogy egy annotációt megadtak –e vagy sem.

boolean template = SampleClass.class.isAnnotationPresent(Template.class);

Megállapítottuk az annotáció jelenlétét, akkor az értéke is olvasható, pl. hogy a metódus még a tesztelés folyamatában van vagy nem.

boolean isTesting = Template.class.getMethod ( "method", new Class [ ] {}).

Ha az annotáció nem található, akkor a getAnnotation() által NullPointerException dobódik. Egy komplex annotációnál az elemeit egyesével kell kiválasztani.

Person costumer = Company.class.getAnnotation(Costumer.class)[0];

Csomagok annotációja

A Java Language Specification engedélyezi a csomagok annotációját, például egy csomag dokumentációjának az előkészítéséhez. Csomagonként maximum egy csomagdeklarációt használhatunk fel egy annotációval. Ha egy csomag annotációt kapna, akkor a Java Language Specification ajánlja egy elkülönített package-info.java adat használatát, amit a csomag jegyzékében ajánlott elhelyezni. Ez az adat tartalmazza a csomagdeklarációt az annotációval együtt.

Jegyzetek

  1. Annotations. Sun Microsystems. [2011. szeptember 25-i dátummal az eredetiből archiválva]. (Hozzáférés: 2011. szeptember 30.).

További példák

További információk

Read other articles:

Indian government ministry concerned with coverage and quality aspects of statistics released Republic of India Ministry of Statistics and Programme ImplementationEmblem of IndiaAgency overviewJurisdictionGovernment of IndiaAnnual budget₹4,859 crore (US$610 million) (2018-19 est.) [1]Agency executiveRao Inderjit Singh, Minister of State (Independent Charge)Child agenciesDepartment of StatisticsDepartment of Programme ImplementationWebsitemospi.gov.in The Ministry of Statistics ...

 

Cette cathédrale n’est pas la seule cathédrale Saint-Jacques. Cathédrale Saint-Jacques Façade de la cathédrale. Présentation Nom local Catedral Primada Metropolitana de Santiago Culte catholicisme Dédicataire saint Jacques Type cathédrale Rattachement archidiocèse de Santiago de Guatemala Début de la construction 1782 Fin des travaux 1867 Géographie Pays Guatemala Ville Guatemala Coordonnées 14° 38′ 30″ nord, 90° 30′ 43″ ouest modifier...

 

2017 ワールド・ベースボール・クラシック 予選4組(ブルックリンラウンド)(英語:2017 World Baseball Classic Qualifier 4: Brooklyn)は、アメリカ合衆国ニューヨーク州ニューヨーク市ブルックリンで開催された、ワールド・ベースボール・クラシック第4回大会の予選ラウンドである[1]。開催期間は2016年9月22日から9月25日。開催会場はMCUパーク(英語版)。 MCUパーク 試合...

Untuk tempat lain yang bernama sama, lihat Teluk Bayur (disambiguasi). Teluk BayurKecamatanKantor kecamatan Teluk BayurNegara IndonesiaProvinsiKalimantan TimurKabupatenBerauPemerintahan • CamatMulyadiPopulasi • Total20,596 jiwa jiwaKode Kemendagri64.03.09 Kode BPS6405090 Luas175,70 km²Desa/kelurahan4/2 Pasar Sanggam Aji Dilayas, pasar tradisional modern terbesar di Indonesia. Teluk Bayur adalah salah satu kecamatan di Kabupaten Berau, Provinsi Kalimantan Timur, I...

 

Australian journalist and commentator Annabel CrabbCrabb promoting The Wife Drought, October 2014BornAdelaide, South Australia, AustraliaNationalityAustralianOccupation(s)Political journalist, commentator, television hostYears active1997–presentSpouseJeremy StorerChildren3RelativesTim Storer (brother-in-law)[1] Annabel Crabb is an Australian political journalist, commentator and television host who is the ABC's chief online political writer. She has worked for Adelaide's The Ad...

 

Dalam aljabar abstrak, homomorfisme atau kehomomorfan (bahasa Inggris: Homomorphism) adalah struktur peta yang menghubungkan dua struktur aljabar. Setiap homomorfisme pasti dapat ditentukan kanelnya, dan kanel pasti subgrup normal, sehingga selalu dapat dibentuk grup faktor, selanjutnya akan dibentuk pengkaitan baru dari ranah homomorfisme ke grup faktor yang dibentuknya, sehingga terbentuklah homomorfisme baru yang disebut homomorfisma natural. Definisi Homomorfisme adalah peta antara du...

العلاقات الإيطالية الكورية الشمالية إيطاليا كوريا الشمالية   إيطاليا   كوريا الشمالية تعديل مصدري - تعديل   العلاقات الإيطالية الكورية الشمالية هي العلاقات الثنائية التي تجمع بين إيطاليا وكوريا الشمالية.[1][2][3][4][5] مقارنة بين البلدين هذه مق

 

President of the United States from 2009 to 2017 For other uses, see Barack Obama (disambiguation). Barack and Obama redirect here. For other uses, see Barack (disambiguation) and Obama (disambiguation). Barack ObamaOfficial portrait, 201244th President of the United StatesIn officeJanuary 20, 2009 – January 20, 2017Vice PresidentJoe BidenPreceded byGeorge W. BushSucceeded byDonald TrumpUnited States Senatorfrom IllinoisIn officeJanuary 3, 2005 – November 16, 2008Pre...

 

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada.Este aviso fue puesto el 28 de agosto de 2020. Nwankwo Kanu Medallista olímpico Datos personalesNombre completo Nwankwo Christian KanuApodo(s) El reyPapiloNacimiento Owerri, Nigeria1 de agosto de 1976 (47 años)País NigeriaNacionalidad(es) Nigeriano NigerianoAltura 1,98 m (6′ 6″)Peso 78 kg (172 lb)Carrera deportivaDeporte FútbolClub profesionalDebut deportivo 1991(Iwuany...

2021 superhero film directed by Basil Joseph Minnal MuraliOfficial release posterDirected byBasil JosephWritten byArun AnirudhanJustin MathewProduced bySophia PaulStarringTovino ThomasGuru SomasundaramCinematographySameer ThahirEdited byLivingston MathewMusic bySongs:Shaan RahmanSushin ShyamBackground Score:Sushin ShyamProductioncompanyWeekend BlockbustersDistributed byNetflixRelease dates 16 December 2021 (2021-12-16) (Mumbai Film Festival) 24 December 2021 ...

 

Silvia Gold Información personalNacimiento 18 de agosto de 1948 (75 años)Buenos Aires (Argentina) Nacionalidad EspañolaFamiliaCónyuge Hugo Sigman EducaciónEducada en Universidad de Buenos Aires Información profesionalOcupación Bioquímica y emprendedora Empleador Mundo Sano [editar datos en Wikidata] Silvia Gold (Buenos Aires, 18 de agosto de 1948) es una empresaria y científica argentina.[1]​ Biografía Gold nació en la ciudad de Buenos Aires el 18 de agosto de 1948,...

 

High-altitude, very thin, generally uniform cloud Cirrostratus cloudCirrostratus nebulosus clouds being illuminated by the sunAbbreviationCsGenusCirrus- curl and-stratus layeredSpecies Fibratus Nebulosus Variety Duplicatus Undulatus Altitude6,000 - 13,000 m (20,000 - 43,000 ft)ClassificationFamily A (High-level)AppearanceThin, transparent, high-altitude layer capable of producing a halo.PrecipitationNo, but usually signal the approach of a warm front. But rain in 24 hours Cirrostratus /ˌsɪr...

1942 film Sweetheart of the FleetTheatrical release posterDirected byCharles BartonScreenplay byAlbert DuffyMaurice TombragelNed DandyStory byAlbert DuffyProduced byJack FierStarringJoan DavisJinx FalkenburgJoan WoodburyBlanche StewartElvia AllmanWilliam WrightCinematographyPhilip TannuraEdited byRichard FantlProductioncompanyColumbia PicturesDistributed byColumbia PicturesRelease date May 21, 1942 (1942-05-21) Running time65 minutesCountryUnited StatesLanguageEnglish Sweethear...

 

Kaisar Taizong dari JinKaisar Dinasti JinBerkuasa27 September 1123 – 9 Februari 1135PendahuluKaisar Taizu dari JinPenerusKaisar Xizong dari JinInformasi pribadiKelahiran(1075-11-25)25 November 1075Kematian9 Februari 1135(1135-02-09) (umur 59)Nama lengkapWanyan Sheng (nama tersinisasi)Wuqimai (nama Jurchen)Tianhui (天會; 1123–1135)Nama anumertaKaisar Tiyuan Yingyun Shide Zhaogong Zhehui Rensheng Wenlie (體元應運世德昭功哲惠仁聖文烈皇帝)AyahWanyan HeliboIbuIbu Suri Na...

 

Mathematical concept A function f from X to Y. The set of points in the red oval X is the domain of f. Graph of the real-valued square root function, f(x) = √x, whose domain consists of all nonnegative real numbers In mathematics, the domain of a function is the set of inputs accepted by the function. It is sometimes denoted by dom ⁡ ( f ) {\displaystyle \operatorname {dom} (f)} or dom ⁡ f {\displaystyle \operatorname {dom} f} , where f is the function. In layman's terms, ...

WWE pay-per-view and livestreaming event Extreme RulesPromotional poster featuring Becky LynchPromotionWWEBrand(s)RawSmackDownDateSeptember 26, 2021CityColumbus, OhioVenueNationwide ArenaAttendance13,455WWE Network event chronology ← PreviousNXT TakeOver 36 Next →Crown Jewel Extreme Rules chronology ← PreviousThe Horror Show Next →2022 The 2021 Extreme Rules was the 13th annual Extreme Rules professional wrestling pay-per-view (PPV) and livestreaming event produced...

 

Australian rules football competition AFL Darling DownsCurrent season, competition or edition: 2023FormerlyDarling Downs Australian Football LeagueSportAustralian rules footballFounded1971; 52 years ago (1971)No. of teams8Most recentchampion(s)Coolaroo (2023)Most titlesUniversity Cougars (11)Promotion to(none)Relegation to(none)Official websiteaflq.com.au/darlingdowns AFL Darling Downs is an Australian rules football competition based in the Darling Downs region of Queenslan...

 

Public square in San Francisco, California Hallidie PlazaView east in East Hallidie Plaza in 2020Show map of San FranciscoShow map of San Francisco Bay AreaShow map of CaliforniaLocationUnion SquareNearest citySan FranciscoCoordinates37°47′4″N 122°24′29″W / 37.78444°N 122.40806°W / 37.78444; -122.40806Created1973Designer John Carl Warnecke Mario Ciampi Lawrence Halprin Public transit accessMuni Metro/BART (Powell Street) Hallidie Plaza is a public squa...

2004 studio album by EmeryThe Weak's EndCover for the re-releaseStudio album by EmeryReleasedJanuary 27, 2004Genre Post-hardcore[1] emo[1][2] Length40:55LabelTooth & NailProducerEd RoseEmery chronology The Columbus EEP Thee(2002) The Weak's End(2004) The Question(2005) Professional ratingsReview scoresSourceRatingAllmusic[1]Jesus Freak Hideout[2]Punk News[3] The Weak's End is the debut studio album by American post-hardcore band Emer...

 

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Sankardev Nagar – news · newspapers · books · scholar · JSTOR (September 2021) (Learn how and when to remove this template message) Town in Assam, IndiaSankardev NagarTownNickname: Sankar devCountry IndiaStateAssamRegionCentral AssamDistrictHojaiGover...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!