Java Guru πŸ€“
13.4K subscribers
935 photos
15 videos
790 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
МоТно Π»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ?

МоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ этот вопрос ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Если имССтся Π² Π²ΠΈΠ΄Ρƒ, пСрСдаСтся Π»ΠΈ аннотация класса-родитСля классу-наслСднику, ΠΎΡ‚Π²Π΅Ρ‚ – ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅Ρ‚. Но наслСдованиС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ссли Π½Π° объявлСнии Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Inherited. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для классов, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ смысл вопроса – наслСдованиС самих Ρ‚ΠΈΠΏΠΎΠ²-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Аннотация, ΠΊΠ°ΠΊ класс ΠΈΠ»ΠΈ интСрфСйс прСдставляСтся Π² систСмС ссылочным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΎΠ½Π° Ρ‚ΠΎΠΆΠ΅ компилируСтся Π² .class-Ρ„Π°ΠΉΠ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ‚ΠΈΠΏΠΎΠΌ, скаТСм, java.lang.Override.

Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ссылочных Ρ‚ΠΈΠΏΠΎΠ², объявлСниС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (
@interface) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ сСкций extends ΠΈΠ»ΠΈ implements. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ систСму Ρ‚ΠΈΠΏΠΎΠ². Π’ скомпилированном ΠΊΠΎΠ΄Π΅ всС Ρ‚ΠΈΠΏΡ‹-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это интСрфСйсы, унаслСдованныС ΠΎΡ‚ Annotation.
πŸ‘22
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
πŸ‘8❀2πŸ₯΄1
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
Anonymous Quiz
41%
A is equal to Infinity
24%
A is equal to NaN
19%
ΠžΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ
17%
ΠžΡˆΠΈΠ±ΠΊΡƒ компиляции
πŸ‘21πŸ₯΄2⚑1πŸ”₯1πŸ€”1
МоТно Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСльзя. Π”ΠΎ Java 8 Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² Π½Π΅ΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠΏΠ΅Ρ€Ρ‚ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массив ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π² этот ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (см. Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅).

Начиная с Java 8 Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΌΠ΅Ρ‚Π°-аннотация
@Repeatable.
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΅Π΅ дСйствия Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅: помСчая Π΅ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ
@Repeatable Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НововвСдСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² синтаксисС использования: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π±ΠΎΡ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ оборачиваСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ нСявно.

Π‘ΠΎ стороны Reflection ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ явно – ΠΌΠ΅Ρ‚ΠΎΠ΄ getAnnotationsByType ΠΏΡ€ΠΈ нСобходимости Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅Ρ‚ этот ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.
πŸ‘11πŸ”₯1
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ послС компиляции ΠΈ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘15❀1
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ послС компиляции ΠΈ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
7%
a test A
24%
a test B
6%
b test A
45%
b test B
5%
b test A test B
3%
Ошибка выполнСния
10%
Ошибка компиляции
πŸ‘27
КакиС Ρƒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚ Ρ‚Π°Ρ€Π³Π΅Ρ‚Ρ‹?

ΠœΠ΅Ρ‚Π°
-аннотация @Target опрСдСляСт, Π² ΠΊΠ°ΠΊΠΎΠΌ контСкстС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ объявляСмая аннотация. ДопустимыС контСксты ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ значСниями ElementType. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли @Target Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ всС контСксты ΠΊΡ€ΠΎΠΌΠ΅ TYPE_PARAMETER. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ‚Π°Ρ€Π³Π΅Ρ‚Ρ‹:

β€’ TYPE – ОбъявлСниС класса, интСрфСйса, Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ enum-Π°.
β€’ FIELD – ОбъявлСниС поля (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ константы enum-ΠΎΠ²).
β€’ METHOD – ОбъявлСниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
β€’ PARAMETER – Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.
β€’ CONSTRUCTOR – ОбъявлСниС конструктора.
β€’ LOCAL_VARIABLE – ОбъявлСниС локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
β€’ ANNOTATION_TYPE – ОбъявлСниС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ для создания ΠΌΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.
β€’ PACKAGE – ОбъявлСниС ΠΏΠ°ΠΊΠ΅Ρ‚Π° (Π²
package-info.java).
–– Π‘ Java 8 ––
β€’ TYPE_PARAMETER – ОбявлСниС generic Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.
β€’ TYPE_USE – Π›ΡŽΠ±ΠΎΠ΅ использованиС Ρ‚ΠΈΠΏΠ°. НапримСр ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: (
@NonNull String) myObject.
–– Π‘ Java 9 ––
β€’ MODULE – ОбъявлСниС модуля.
πŸ”₯10πŸ‘2
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠΉ части ΠΊΠΎΠ΄Π°?
πŸ‘7
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π΄Π°Π½Π½ΠΎΠΉ части ΠΊΠΎΠ΄Π°?
Anonymous Quiz
14%
1
62%
2
5%
Ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния
20%
Ошибка компиляции
πŸ‘8
Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ @⁠Deprecated?

Π­Ρ‚ΠΎΠΉ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устарСл ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ использован. ΠšΠ»Π°ΡΡΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ @Deprecated элСмСнты, Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с warning-ΠΎΠΌ.

Π˜ΠΌΠ΅Π΅Ρ‚ retention RUNTIME, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ динамичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° элСмСнтС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Reflection API.

Начиная с Java 9 Ρƒ этой Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ появились ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ – строка since ΠΈ Π±ΡƒΠ»Π΅Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ forRemoval. Π’ since указываСтся вСрсия вашСго прилоТСния, начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ элСмСнт считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true Π² forRemoval ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΆΠΎΡ€Π½ΠΎΠΉ вСрсии этот элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Π’Π°ΠΊΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ связано с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ устарСвания – с Java 9 ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ элСмСнты самой JDK Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° элСмСнт ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ устарСвания ΠΈ дальнСйшиС Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π² Π΅Π³ΠΎ Javadoc-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ Ρ‚Π΅Π³ΠΎΠΌ
@deprecated.
πŸ‘17
Π”Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы:
πŸ‘8
ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅ всС ΠΌΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

ΠœΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для объявлСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Π’ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠ΅Ρ‚Π°-аннотациями ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ с Ρ‚Π°Ρ€Π³Π΅Ρ‚ΠΎΠΌ ANNOTATION_TYPE, Π½ΠΎ основных Π² Java сущСствуСт 5. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ для Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ:

β€’ @⁠Retention – ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π΅Ρ‚ Π»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

β€’ @⁠Inherited – примСняСтся ΠΊ наслСдникам.

β€’ @⁠Repeatable – примСняСма нСсколько Ρ€Π°Π· ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ элСмСнту.

β€’ @⁠Target – контСксты, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ.

β€’ @⁠Deprecated – Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ.
πŸ‘22πŸ•Š2❀1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘6⚑1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
55%
Tt.iss.onethodA 1
15%
Tt.iss.onethodA 2
10%
Tt.iss.onethodA 0
7%
Ошибка выполнСния
14%
Ошибка компиляции
πŸ‘24❀4
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Type Erasure?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ удаляСт ΠΈΠ· Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° класс-Ρ„Π°ΠΉΠ»Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…. Π­Ρ‚ΠΎΡ‚ процСсс ΠΈ называСтся стираниС Ρ‚ΠΈΠΏΠΎΠ² (type erasure). Он появился Π² Java 5 вмСстС с самими Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· пСрСкомпилляции ΠΊΠΎΠ΄Π° Java 4.

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… дСйствий:
πŸ”˜ Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ (bounded), вмСсто Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² мСстах использования подставляСтся вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π°, ΠΈΠ½Π°Ρ‡Π΅ Object;
πŸ”˜ Π’ мСстах присвоСния значСния Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° добавляСтся каст ΠΊ этому Ρ‚ΠΈΠΏΡƒ;
πŸ”˜ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ bridge-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… стираСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΎ остаСтся Π² ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ самого класса. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Field#getGenericType.

Π’ΠΈΠΏ со стСртой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… называСтся Β«Non-reifiableΒ».

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² позволяСт Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π½ΠΎΠ²Ρ‹Π΅ классы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, шаблонов C++.
πŸ‘28❀1❀‍πŸ”₯1
Π§Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘8🍾2
Как ограничиваСтся Ρ‚ΠΈΠΏ generic ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°?

Π’ объявлСнии Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° класса ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° Π΅Π³ΠΎ вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° (bound)

class Foo<T extends Number>

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends примСняСтся ΠΊΠ°ΠΊ для классов, Ρ‚Π°ΠΊ ΠΈ для интСрфСйсов. ЀактичСским ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Foo ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ сам Number, ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСдники.

Помимо ограничСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… примСняСмых Ρ‚ΠΈΠΏΠΎΠ², bounded-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля Ρ‚ΠΈΠΏΠ°-ограничитСля – ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ фактичСского Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ достигаСтся стираниСм Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Π²Π΅Ρ€Ρ…Π½ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ-пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ²: <T extends Comparable & Serializable>. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ†, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ послуТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² фактичСского Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Ρ€Π°Π½ΠΈΡ†Π°-класс, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Π³Ρ€Π°Π½ΠΈΡ†-интСрфСйсов.
ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ значСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ – символ ?. Π’Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, этот Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ совсСм.

Для Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ для объявлСния Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ объявлСния здСсь нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π² случаС Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

Foo<? super Number> foo;

ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π΅Π΄ΠΎΠΊ класса Number. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ сам Number, ΠΈΠ»ΠΈ Object.

Π’ объявлСнии класса ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° использованиС super Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла.

Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² использования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚
это Π²ΠΈΠ΄Π΅ΠΎ.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ API Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с классами-наслСдниками, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎ- ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌ Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠŸΡ€ΠΈ этом Π±Π΅Π· bounded Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, какая Π³Ρ€Π°Π½ΠΈΡ†Π° Π½ΡƒΠΆΠ½Π° Π² ΠΊΠ°ΠΊΠΈΡ… случаях, Joshua Bloch ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΡƒ PECS:
Producer-extends, Consumer-super
πŸ‘16❀1
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘11