Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Java: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Π›ΠŸ)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 96

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

Насколько цСлСсообразно ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ β€” вопрос спорный. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, Ρ€Π°Π·ΠΌΠ΅Ρ€ исходного ΠΊΠΎΠ΄Π° Π² этом случаС сокращаСтся. А с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ просматриваСт исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСпонятно, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ имя out: ΠΏΠΎΡ‚ΠΎΠΊ стандартного Π²Ρ‹Π²ΠΎΠ΄Π° System, out ΠΈΠ»ΠΈ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅.

Каким Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π½ΠΈ Π±Ρ‹Π» статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚, Π²Π°ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ примСнялся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Как извСстно, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ классов Java ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠΌΠ΅Π½Π½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ ΠΈΠΌΠ΅Π½. Если ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ статичСскиС Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΎΠ½ΠΈ пСрСносятся Π² глобальноС пространство ΠΈΠΌΠ΅Π½. ВслСдствиС этого увСличиваСтся Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΈ Π½Π΅ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ сокрытия ΠΈΠΌΠ΅Π½. Если статичСский Ρ‡Π»Π΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Ρ€Π°Π·Π°, Ρ‚ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° статичСских Ρ‡Π»Π΅Π½ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, System, out) Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ всСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ Π½Π° Java, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ окаТутся ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ·Π½Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ, Ссли Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒΡΡ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ своСго класса. БтатичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π±Ρ‹Π» Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² расчСтС Π½Π° Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… постоянно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ статичСскиС Ρ‡Π»Π΅Π½Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ матСматичСских расчСтах. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, статичСским ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠΌ слСдуСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ, Π½Π΅ злоупотрСбляя ΠΈΠΌ.Аннотации (ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅)

Начиная с вСрсии JDE 5 Π² Java Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΎ срСдство, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² исходный Ρ„Π°ΠΉΠ» Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΈ свСдСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдствах ΠΊΠ°ΠΊ Π½Π° этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ‚Π°ΠΊ ΠΈ Π² процСссС развСртывания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π’ частности, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ исходного ΠΊΠΎΠ΄Π°, компилятором ΠΈΠ»ΠΈ срСдствами развСртывания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния, Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Π² исходный Ρ„Π°ΠΉΠ», ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ аннотация Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Вопросы составлСния ΠΈ примСнСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ выходят Π·Π° Ρ€Π°ΠΌΠΊΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ. Для ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΈΡ… рассмотрСния здСсь просто нСдостаточно мСста. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ограничимся лишь ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ описаниСм самого понятия ΠΈ назначСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ.

На Π·Π°ΠΌΠ΅Ρ‚ΠΊΡƒΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ аннотациями ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅ Java. ПолноС руководство, 8-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, Π˜Π” "Π’ΠΈΠ»ΡŒΡΠΌΡ", 2012 Π³.

Для составлСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ слуТит ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово interface. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.// ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ[email protected] MyAnno { String str(); int val();}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ аннотация MyAnno. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово interface прСдваряСтся Π·Π½Π°ΠΊΠΎΠΌ @. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ компилятору сообщаСтся ΠΎΠ± объявлСнии Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° Ρ‡Π»Π΅Π½Π° β€” str () ΠΈ val (). ВсС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ содСрТат лишь объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° ΠΈΡ… Ρ‚Π΅Π»Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ нСльзя. ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ систСма Java, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ полям.

Аннотации всСх Ρ‚ΠΈΠΏΠΎΠ² автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ интСрфСйс Annotation. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Annotation слуТит Π² качСствС супСринтСрфСйса для всСх Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Он Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ java.lang.annotation.

Объявив Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для аннотирования объявлСния. ΠΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с Π»ΡŽΠ±Ρ‹ΠΌ объявлСниСм. Π’ частности, Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ объявлСния классов, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ»Π΅ΠΉ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², констант пСрСчислимого Ρ‚ΠΈΠΏΠ° ΠΈ Π΄Π°ΠΆΠ΅ самих Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Но Π² любом случаС аннотация ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части объявлСния.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π²Ρ‹ Ρ‚Π΅ΠΌ самым Π·Π°Π΄Π°Π΅Ρ‚Π΅ значСния Π΅Π΅ Ρ‡Π»Π΅Π½ΠΎΠ². НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ MyAnno, примСняСмой ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ.// АннотированиС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°[email protected](str = "Annotation Example", val = 100)public static void myMeth() { // ...

Π­Ρ‚Π° аннотация связываСтся с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ myMeth (). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° синтаксис Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ИмСни Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π·Π½Π°ΠΊ @, Π° послС ΠΈΠΌΠ΅Π½ΠΈ слСдуСт список, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π΅ Ρ‡Π»Π΅Π½ΠΎΠ². Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π»Π΅Π½Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, слСдуСт ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°. Π’ рассматриваСмом здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ символьная строка "Annotation Example" (ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ) присваиваСтся Ρ‡Π»Π΅Π½Ρƒ str Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ MyAnno. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания скобки послС Ρ‡Π»Π΅Π½Π° str Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ присваивании значСния Ρ‡Π»Π΅Π½Ρƒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ имя. Π’ этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‡Π»Π΅Π½Ρ‹ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° поля.

Аннотация Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² называСтся ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠΌ. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Π“Π»Π°Π²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° β€” ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ объявлСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ.

Π’ Java ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎ встроСнных Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ аннотациями ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ спСциализированными. Π’ ΠΏΠ°ΠΊΠ΅Ρ‚ java.lang.annotation входят Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Β©Retention, Β©Documented, @Target ΠΈ @Inherited. Аннотации @Override, @Deprecated ΠΈ Β©SuppressWarnings Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ ava.lang. НазначСниС этих сСми Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Ρ‚Π°Π±Π». 12.1.

Π’Π°Π±Π»ΠΈΡ†Π° 12.1. ВстроСнныС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΠΠ½Π½ΠΎΡ‚Π°Ρ†ΠΈΡΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅@RetentionΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° сохранСния, связываСмыС с Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ. ΠŸΡ€Π°Π²ΠΈΠ»Π° сохранСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ аннотация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² процСссС компиляции ΠΈ развСртывания ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹@DocumentedΠœΠ°Ρ€ΠΊΠ΅Ρ€, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ срСдству ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ аннотация докумСнтируСтся. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΊ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ объявлСния@TargetΠ—Π°Π΄Π°Π΅Ρ‚ Π²ΠΈΠ΄Ρ‹ объявлСний, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° аннотация. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΎΠ΄Π½ΠΎΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Данная аннотация ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²ΠΈΠ΄Π΅ константы пСрСчислимого Ρ‚ΠΈΠΏΠ° ElementType, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ константы, Π² Ρ‚ΠΎΠΌ числС CONSTRUCTOR, FIELD ΠΈ METHOD. АргумСнт опрСдСляСт Π²ΠΈΠ΄Ρ‹ объявлСний, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° аннотация@InheritedΠœΠ°Ρ€ΠΊΠ΅Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ аннотация супСркласса Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ подклассом@OverrideΠœΠ΅Ρ‚ΠΎΠ΄, Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ Β©Override, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ супСркласса. Если это условиС Π½Π΅ выполняСтся, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка ΠΏΡ€ΠΈ компиляции. Данная аннотация прСдставляСт собой ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΈ позволяСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ супСркласса Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π° Π½Π΅ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½@DeprecatedΠœΠ°Ρ€ΠΊΠ΅Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ объявлСниС устарСло ΠΈ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΌ@SuppressWarningsΠ£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгСнСрированы ΠΏΡ€ΠΈ компиляции, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Ρ‹. ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ сообщСния Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, прСдставлСнными Π² строковом Π²ΠΈΠ΄Π΅

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @Deprecated ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ класс MyClass ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ getMsg (). ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² исходном ΠΊΠΎΠ΄Π΅ содСрТатся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΈ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ элСмСнты.// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ @Deprecated.// ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ класс ΠΊΠ°ΠΊ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ[email protected] MyClass { private String msg; MyClass(String m) { msg = m; } // ΠŸΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС ΠΊΠ°ΠΊ // Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ. @Deprecated String getMsgO { return msg; } // ...}class AnnoDemo { public static void main(String args[]) { MyClass myObj = new MyClass("test"); System.out.println(myObj.getMsg()); }}Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ для самопровСрки ΠΏΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρƒ Π³Π»Π°Π²Ρ‹ 12

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ пСрСчислимого Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ самотипизированными. Π§Ρ‚ΠΎ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚?

Какой класс автоматичСски Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ пСрСчислСния?

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ пСрСчислСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ values () слуТит для отобраТСния списка констант ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. enum Tools { SCREWDRIVER, WRENCH, HAMMER, PLIERS }

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ свСтофор ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для опробования 12.1, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, внСся ряд простых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями пСрСчислСний. Π’ исходной вСрсии этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° свСтофора Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π² классС Traf f icLightSimulator, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ Π±Ρ‹Π»ΠΈ ТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run (). Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° свСтофора задавалась константами пСрСчислимого Ρ‚ΠΈΠΏΠ° Traf f icLightColor. Для этого Π²Π°ΠΌ понадобятся конструктор, пСрСмСнная экзСмпляра, объявлСнная ΠΊΠ°ΠΊ private, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ getDelay (). ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. (Подсказка: ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ порядковыми значСниями ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСтофора.)