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

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

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

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ heap pollution?

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, массивы Π² Java ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹. А Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° String[] Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Object[], ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Integer. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ скомпилируСтся, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ записи ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ArrayStoreException.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ List<Object> Π² List<String>, эта ΠΆΠ΅ ΠΏΠΎ сути ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π° этапС компиляции.

Heap pollution – ситуация, ΠΊΠΎΠ³Π΄Π° эта Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π΅ срабатываСт, ΠΈ пСрСмСнная ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

List<String> strings = (List) new ArrayList<Integer>();

ДокумСнтация Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции всСго ΠΊΠΎΠ΄Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, heap pollution Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π±Π΅Π· Π²Π°Ρ€Π½ΠΈΠ½Π³Π° этапа компиляции.
Heap pollution ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² Π΄Π²ΡƒΡ… случаях: ΠΏΡ€ΠΈ использовании массивов Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΈ смСшивании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ raw-Ρ‚ΠΈΠΏΠΎΠ².

Raw types – это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±Π΅Π· указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с raw types, приводящий ΠΊ heap pollution, ΡƒΠΆΠ΅ Π±Ρ‹Π» описан Π²Ρ‹ΡˆΠ΅:

List<String> strings = (List) new ArrayList<Integer>();

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ raw types Π½Π΅ Π½Π°Π΄ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π³Π»Π°Π²Π΅ 26 Effective Java. Если информация ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… Π½Π΅ Π½ΡƒΠΆΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ wildcard (<?>).

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ даст ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС generic array creation. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π²Ρ‹ΡˆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊ Ρ‡Π΅ΠΌΡƒ это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ привСсти.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ varargs-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚.ΠΊ. varargs – Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-массив. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ компилятора Β«possible heap pollutionΒ». Если Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Ρ‡Ρ‚ΠΎ риска Π½Π΅Ρ‚, с Java 7 это ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π°Π³Π»ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@SafeVarargs.
πŸ‘12πŸ”₯3❀2πŸ₯°1
πŸ’ͺ Как Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΡ…ΠΎΠ΄ Π² 2024?

ΠžΡΠ²ΠΎΠΈΡ‚ΡŒ JVM с ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ°Ρ… Π½Π° ΠΎΠ½Π»Π°ΠΉΠ½-курсС Β«Java Developer. AdvancedΒ» ΠΎΡ‚ OTUS.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° идСально ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ ΠΎΡ‚ 2-Ρ… Π»Π΅Ρ‚, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ знания Π² устройствС JVM, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… профилирования ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΉ инфраструктурС.

На курсС вас ΠΆΠ΄ΡƒΡ‚:

▫️ ΠΆΠΈΠ²Ρ‹Π΅ Π²Π΅Π±ΠΈΠ½Π°Ρ€Ρ‹ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π΄Π°Ρ‚ΡŒ вопросы экспСртам;
▫️много ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΈ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ для ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ;
▫️поддСрТка ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ;
▫️ рассрочка Π½Π° ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Ρ‹Ρ… условиях.

🀝 ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ свои Π½Π°Π²Ρ‹ΠΊΠΈ пройдя тСст ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅Π½Ρƒ: https://otus.pw/LiVg/

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯6πŸ‘2πŸ₯°2❀1
Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ²?

Для
Π½Π°Ρ‡Π°Π»Π° разбСрСмся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ². Type inference – это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ компилятора Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π·Π° вас. На ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ спросит Π΄Π΅Ρ‚Π°Π»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠΎΠ², достаточно Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ происходит статичСски, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° основании Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. По сути, вопрос Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π΅ Π² Β«ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚?Β», Π° Β«Ρ‡Ρ‚ΠΎ это ΠΈ ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚?Β».

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΏΡ€ΠΈ Ρ„Ρ€Π°Π·Π΅ Β«Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ²Β» – diamond operator <>. Он появился Π² Java с вСрсии 7. Π•Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΊ конструкторам Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ классов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ автоматичСского Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° ΠΎΡ‚ raw type.

Π‘ Java 9 diamond operator Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΈ для Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… классов.

Для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ явно, Π½ΠΎ diamond синтаксичСски нСдопустим – Π²Ρ‹Π²ΠΎΠ΄ ΠΈ Ρ‚Π°ΠΊ сработаСт ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’ Java 10 для Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚ΠΈΠΏΠ° локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ это Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ соврСмСнных языков – ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ставится вмСсто Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈ объявлСнии.

Π’ΠΈΠΏΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² лямбда-выраТСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ. Π‘ Java 11 вмСсто Ρ‚ΠΈΠΏΠ° указываСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var. Π’Π°ΠΊΠΎΠΉ синтаксис Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.
πŸ‘11πŸ”₯4❀2❀‍πŸ”₯1
Как ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр generic Ρ‚ΠΈΠΏΠ°?

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса class Foo<T> Π½Π° generic ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ T Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€: нСльзя Π²Π·ΡΡ‚ΡŒ Π΅Π³ΠΎ .class, нСльзя ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² instanceof. Π’Π°ΠΊΠΆΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² Π½Π° Π½Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС.

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этих ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ кроСтся Π² стирании Ρ‚ΠΈΠΏΠΎΠ². Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ скорСС ΠΊΠ°ΠΊ ограничСния Ρ‚ΠΈΠΏΠΎΠ², Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Π­Ρ‚ΠΈ ограничСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ для Π±ΠΎΠ»Π΅Π΅ строгих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π½Π° этапС компиляции. Π’ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΆΠ΅ информация ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… стираСтся. А всС эти ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ простой способ дСйствия здСсь – ΠΊΡ€ΠΎΠΌΠ΅ значСния Ρ‚ΠΈΠΏΠ° T ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-дСскриптор для этого Ρ‚ΠΈΠΏΠ°, экзСмпляр класса Class<T>. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создан ΠΈΠ· дСскриптора Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ΅Π½ΠΎΠΌ.

Но сущСствуСт ΠΎΠ΄ΠΈΠ½ Ρ…Π°ΠΊ, способный ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ со стираниСм Ρ‚ΠΈΠΏΠΎΠ². Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ всС-Ρ‚Π°ΠΊΠΈ остаСтся Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅. ΠœΠ΅Ρ‚ΠΎΠ΄ мСтакласса наслСдника ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ getGenericSuperclass() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ.
πŸ‘12❀3β˜ƒ1
БСсплатный практичСский Π²Π΅Π±ΠΈΠ½Π°Ρ€ β€” Java: с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ?

⏰ Когда: 29 фСвраля Π² 19:00 ΠΏΠΎ мск.

РасскаТСм Π·Π° 2 часа, ΠΊΠ°ΠΊ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ программирования Π½Π° Java, Π½Π°ΠΉΡ‚ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ расти Π² профСссии.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ познакомимся с синтаксисом языка ΠΈ напишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ часто Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ Π½Π° тСхничСском ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ.

🎁 ВсСм, ΠΊΡ‚ΠΎ зарСгистрировался β€” Π“Π°ΠΉΠ΄ «Как Π·Π°Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° слСнгС IT-спСциалистов», Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ участнику β€” ΠšΠ°Ρ€Ρ‚Π° ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΉ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. 

ΠŸΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ΡΡŒ Π² основы Java ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ вопросы ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ!
πŸ‘3
Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ArrayStoreException?

Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Вакая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·-Π·Π° ковариантности массивов.

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ массива Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. НапримСр, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² любой массив:

 Object x[] = new String[3];
x[0] = new Integer(0);

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅ элСмСнт ΠΈΠ· массива, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ прСдставитСлСм Ρ‚ΠΈΠΏΠ° элСмСнтов самого этого массива. НС Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° пСрСмСнная Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚. ИмСнно для обСспСчСния этой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, которая ΠΈ выбрасываСт ArrayStoreException.

Битуация ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ heap pollution Π² случаС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Волько для этого случая такая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅ΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° этапа компиляции:

// Ошибка компиляции – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹!
List<Object> x = new ArrayList<String>();
πŸ‘13❀1
МоТно Π»ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ generic-Ρ‚ΠΈΠΏΠ°?

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ – Π΄Π°. Как Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹Ρ… вопросов ΠΏΡ€ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, ΠΎΡ‚Π²Π΅Ρ‚ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ Ссли ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π²ΠΎ Ρ‡Ρ‚ΠΎ сотрутся Ρ‚ΠΈΠΏΡ‹-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° T, этот Ρ‚ΠΈΠΏ T Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΌ Throwable. ИмСнно Π² Throwable Π² Ρ‚Π°ΠΊΠΎΠΌ случаС сотрСтся T ΠΏΡ€ΠΈ компиляции. Π’Π°ΠΊΠΆΠ΅ Π² качСствС Ρ‚ΠΈΠΏΠ°-Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любого наслСдника Throwable:

class MyClass<T extends IOException> {
void foo() throws T {
// ...
}
}
πŸ‘13πŸ”₯4
НачинаСм Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ нСдСлю с ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ бСсплатных ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… Π²Π΅Π±ΠΈΠ½Π°Ρ€ΠΎΠ² ΠΎΡ‚ Β«Π£ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ€ΠΎΠ΄Π°Β»!

27 фСвраля Π² 20:00 – Онлайн мастСр-класс "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅Π±-Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π±Π°Π½Π½Π΅Ρ€Π° для сайта"
Аудитория: взрослыС 18-35 Π»Π΅Ρ‚
Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://nordic-it-school.timepad.ru/event/2757299/

27 фСвраля Π² 17:00 – Онлайн мастСр-класс для Π΄Π΅Ρ‚Π΅ΠΉ ΠΎΡ‚ 8 Π»Π΅Ρ‚ Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ – ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊ Π² ScratchΒ».
Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://www.programmistik.ru/events/translator_scratch

28 фСвраля Π² 20:00 – Онлайн мастСр-класс "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ прилоТСния ΠΏΠΎ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ английского языка Π½Π° языкС Kotlin для Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Android"
Аудитория: взрослыС 18-35 Π»Π΅Ρ‚
Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://nordic-it-school.timepad.ru/event/2761604/

29 фСвраля Π² 17:00 – Онлайн мастСр-класс для Π΄Π΅Ρ‚Π΅ΠΉ ΠΎΡ‚ 12 Π»Π΅Ρ‚ Β«Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ½Π»Π°ΠΉΠ½-Ρ„ΠΎΡ‚ΠΎΠ°Π»ΡŒΠ±ΠΎΠΌ Π² конструкторС сайтов TildaΒ».
Бсылка Π½Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ: https://www.programmistik.ru/events/site_foto

ΠœΠ°ΡΡ‚Π΅Ρ€-классы проводятся Π² трансляциях сообщСства павильона Β«Π£ΠΌΠ½Ρ‹ΠΉ Π³ΠΎΡ€ΠΎΠ΄Β». Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ.

АНО «Цифровая трансформация» ИНН: 9709063543 Π•rid:2VtzqxhnLA6
❀6πŸ‘2
Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… – Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π° Ρ‡Ρ‚ΠΎ нСльзя?

1. МоТно Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ generic-Ρ‚ΠΈΠΏΠ°.
Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² throws, пСрСмСнная Ρ‚ΠΈΠΏΠ° T ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² throw. НСдавно ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± этом.

2. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Π² catch.
ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ catch Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС – ΠΎΡ‚ спСцифичного класса ΠΊ Π±ΠΎΠ»Π΅Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² связи с этими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΎ Π±Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ, Π½Π΅ нСся особой ΠΏΠΎΠ»ΡŒΠ·Ρ‹.

3. НСльзя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.
Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π° class MyException<T> extends Throwable {}, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ generic class may not extend java.lang.Throwable.

4. МоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ generic-интСрфСйс.
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Comparable ΠΈΠ»ΠΈ Iterable. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° классах, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ затрагивая интСрфСйсы.
πŸ‘13πŸ”₯2
🀝 Нам каТСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ курсу Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π½Π° Spring Framework

На курсС всС максимально строго:

- ΠšΡƒΡ€Ρ рассчитан Π½Π° профСссионалов с практичСским ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Java.
- ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ 5 мСсяцСв ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ вас Π² Ρ‚Π΅ΠΎΡ€ΠΈΡŽ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Spring Framework.
- Π”Π°Π΄ΠΈΠΌ 18 практичСских Ρ€Π°Π±ΠΎΡ‚. β—οΈΠŸΡ€ΠΎΡ†Π΅ΡΡ review сдаваСмой Ρ€Π°Π±ΠΎΡ‚Ρ‹ максимально ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ ΠΊ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.
- Помимо этого, ΠΌΡ‹ попросим вас ΡΠ΄Π°Ρ‚ΡŒ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ трСбования ΠΊ Π½Π΅ΠΉ (p.s. ΠΈ Ρ‡Π΅ΠΌ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π°)?

🀝 Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ 28 фСвраля Π½Π° бСсплатном Π΄Π΅ΠΌΠΎ-ΡƒΡ€ΠΎΠΊΠ΅ "Как Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚?"

➑️ Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° Π΄Π΅ΠΌΠΎ-ΡƒΡ€ΠΎΠΊ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‰Π΅ ΠΈ тСст ΠΏΡ€ΠΎΠΉΡ‚ΠΈ.
ΠšΡΡ‚Π°Ρ‚ΠΈ, это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ шанс ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ свои знания!

ΠŸΡ€ΠΎΠΉΡ‚ΠΈ тСст

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘5πŸŽ‰2❀1πŸ₯΄1🌚1
Как ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ upcasting Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°?

Π—Π°Π΄Π°Ρ‡Π°: Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

<T> void pair(T a, T b) {}

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ pair(Foo, Foo), Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ pair(Foo, Bar).

Upcasting – ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. String β†’ Object, Integer β†’ Number.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… классов Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Object. Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ String ΠΈ Boolean – согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ вычислСния Ρ‚ΠΈΠΏΠ°-Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T Π±ΡƒΠ΄Π΅Ρ‚ стСрт Π² Object.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ super Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚: для этого Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ.

Ѐокус Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° этапС компиляции это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ° всСгда являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°-родитСля (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is a). Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ООП, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π» Π±Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Лисков.

ЕдинствСнная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ повСдСния – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getClass() ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.
πŸ‘12πŸ”₯2
Как Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ VisualVM Π² Java?

РасскаТСт АлСксандр Π¦Π°Ρ€Π΅Π² β€” Tech Lead Π² Π‘Π±Π΅Ρ€Π΅ ΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ тСхничСских Π½Π°ΡƒΠΊ.
ВстрСчаСмся Π½Π° бСсплатном практичСском ΡƒΡ€ΠΎΠΊΠ΅ ΠΎΡ‚ OTUS, Π³Π΄Π΅ Π²Ρ‹ вмСстС с ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌ экспСртом:

- вспомнитС, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π°ΠΌΠΏ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ;
- ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ сСмплированиСм ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнта VisualVM;
- Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сСмплирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎ Π½ΠΈΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ·ΠΊΠΈΠ΅ мСста Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

πŸ“’πŸ“’ ЗанятиС ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚ 6 ΠΌΠ°Ρ€Ρ‚Π° Π² 20:00 мск ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡƒΡ€ΠΎΡ‡Π΅Π½ΠΎ ΠΊ старту курса Β«Java Developer. AdvancedΒ».
Доступна рассрочка Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅!

➑️ ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ тСст прямо сСйчас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΡΡ‚ΡŒ мСсто Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ запись: https://otus.pw/ZsER/

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘5❀2
Когда Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ raw types?

Π‘Π½Π°Ρ‡Π°Π»Π° вспомним, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ raw type. Π’ Java Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ generic-Ρ‚ΠΈΠΏΡ‹ Π±Π΅Π· указания Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Вакая языковая конструкция Π²Π°Π»ΠΈΠ΄Π½Π°, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ компилятора.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ связано с риском получСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ heap pollution. Π•ΠΉ ΠΌΡ‹ ΡƒΠΆΠ΅ посвящали ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ
Ρ€Π°Π½Π΅Π΅. ИспользованиС raw types Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ – спСцификация языка явно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

Π•ΡΡ‚ΡŒ всСго Ρ‚Ρ€ΠΈ случая, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:
β€’ ЦСлСвая вСрсия Java < 5.0 (2002 Π³ΠΎΠ΄ ΠΈ Ρ€Π°Π½Π΅Π΅ – вряд Π»ΠΈ это ваш случай);
β€’ Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ класса. List<String>.class Π½Π΅ сработаСт, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ List.class;
β€’ Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ instanceof. ВмСсто instanceof Set<Integer> Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ instanceof Set.
πŸ‘10
β˜•οΈΠžΡΠ²ΠΎΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Π½Π°Π²Ρ‹ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° Java

ВсСго Π·Π° ΠΏΠ°Ρ€Ρƒ часов Π½Π° бСсплатном практичСском ΡƒΡ€ΠΎΠΊΠ΅ Β«Π”Π΅Π±Π°Π³Π³ΠΈΠ½Π³ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° JavaΒ» ΠΎΡ‚ OTUS.

На Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅:

βœ… ΠŸΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Java-ΠΊΠΎΠ΄Π° Π² самой популярной срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ;
βœ… Π£Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Π΅Π±Π°Π³Π³ΠΈΠ½Π³ ΠΈ ΠΊΠ°ΠΊ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π°Π³ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π΅Π±Π°Π³Π³ΠΈΠ½Π³Π°;
βœ… ΠžΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° всС Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ вопросы.

ВстрСчаСмся 5 ΠΌΠ°Ρ€Ρ‚Π° Π² 20:00 мск Π² Ρ€Π°ΠΌΠΊΠ°Ρ… курса «БпСциализация Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ». Доступна рассрочка Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅!

Π Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ прямо сСйчас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠ΅Ρ‚ΠΈΡ‚ΡŒ бСсплатный ΡƒΡ€ΠΎΠΊ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ запись: https://vk.cc/cv2ULt
πŸ‘5πŸ”₯3
Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ runtime ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ generic-Ρ‚ΠΈΠΏΠ΅?

Когда Π²Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ API-ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°. ОсобСнно часто с этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ парсСров. НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Jackson ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. На ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ этот вопрос ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ практичСской Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ сработаСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ стёрт Π²ΠΎ врСмя компиляции, Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π²ΠΎ врСмя выполнСния.

РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сработаСт для ΠΌΠ½ΠΎΠ³ΠΈΡ… случаСв – объявлСниС Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° Class<T>. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Foo.class ΠΈΠ»ΠΈ fooInstance.getClass(). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½ΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° становится Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ generic-Ρ‚ΠΈΠΏ. Бинтаксис .class Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, Π° .getClass() ΠΎΡ‚ экзСмпляров List<String> ΠΈ List<Integer> Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-описаниС сырого Ρ‚ΠΈΠΏΠ° List.

На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, описанная Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ
ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

1. ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ generic класс-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ Ρ‚ΠΈΠΏΠΎΠΌ: TypeInformation<T>;. Наш ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π² Π²ΠΈΠ΄Π΅ экзСмпляра этой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ.

2. Π’ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ добавляСтся конструктор с Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ protected. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наслСдников, Π½ΠΎ Π½Π΅ самого этого Ρ‚ΠΈΠΏΠ°.

3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ наслСдника ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ: new TypeInformation<List<String>>() {}.

4. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π·ΠΎΠ² getClass().getGenericSuperclass() Π²Π΅Ρ€Π½Π΅Ρ‚ ParameterizedType. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ описаниС Ρ‚ΠΈΠΏΠ° родитСля Π°Π½ΠΎΠ½ΠΈΠΌΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ самой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ. Из Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getActualTypeArguments() ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° (ΠΎ List<String>).
πŸ”₯15πŸ‘6⚑1
ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ Π»ΠΈ List<?> ΠΎΡ‚ List<? extends Object>?

ВсС классы Π±Π΅Π· ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Object. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ wildcard <?> всСгда ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² качСствС Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Оба этих Ρ‚ΠΈΠΏΠ° Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ сотрутся Π² List<Object>, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Π½Π΅Ρ‚.

НС смотря Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, сущСствуСт ΠΎΠ΄Π½ΠΎ синтаксичСскоС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅. НСограничСнный Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ – reifiable Ρ‚ΠΈΠΏ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдставлСн Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ instanceof, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ синтаксичСская конструкция x instanceof List<? extends Object> ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.
πŸ‘13😁2πŸ”₯1
Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Π° Java Serialization? Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ класс сСриализуСмым?

БСриализация – это сохранСниС Ρ‚ΠΈΠΏΠ° ΠΈ состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сохранСния/ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ дСсСриализации. Для сСриализации ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ интСрфСйс Serializable (Externalizable), ΠΈ Ρ†Π΅Π»ΡŒ записи/источник чтСния ObjectInputStream/ObjectOutputStream (ObjectInput/ObjectOutput).

Класс сСриализуСм, Ссли:
πŸ”˜ Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс Serializable;
πŸ”˜ ВсС поля сСриализуСмыС ΠΈΠ»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ transient (ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ выбросит NotSerializableException).

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» стандартной сСриализации описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

БСриализационная Ρ„ΠΎΡ€ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚, ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ кастомизирована. ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ логичСскоС прСдставлСниС Π΄Π°Π½Π½Ρ‹Ρ…, Π±Π΅Π· Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎ физичСской Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Для описания ΠΏΠΎΠ»Π΅ΠΉ сСриализационной Ρ„ΠΎΡ€ΠΌΡ‹ Π² javadoc-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ тэг
@serial. Для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π΅ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ @serialData. Π­Ρ‚ΠΈ тэги ΠΈΠΌΠ΅ΡŽΡ‚ смысл ΠΈ для ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эффСктивно Ρ‚Π°ΠΊΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ – Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ API.

НСстатичСскиС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сСриализуСмыми. БтатичСскиС поля ΠΊΠ°ΠΊ поля класса Π° Π½Π΅ инстанса нСсСриализуСмы.
πŸ‘6πŸ”₯2
Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Serial Version UID? Π§Ρ‚ΠΎ Ссли Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ?

Π‘Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ класс явно ΠΈΠ»ΠΈ нСявно, Π½ΠΎ всСгда ΠΈΠΌΠ΅Π΅Ρ‚ serialVersionUID. Π­Ρ‚ΠΎ число Ρ‚ΠΈΠΏΠ° long, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт собой Β«Π²Π΅Ρ€ΡΠΈΡŽΒ» сСриализационной Ρ„ΠΎΡ€ΠΌΡ‹ класса. Если ΠΏΡ€ΠΈ сСриализации/дСсСриализации значСния serialVersionUID Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ – Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€ΠΎΡˆΠ΅Π½ΠΎ InvalidClassException.

Для ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… вСрсий Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ мощная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ класса – совмСстимыС измСнСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ приводят ΠΊ InvalidClassException.

НСявноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вычисляСтся автоматичСски Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚ΠΈΠΏΠ°, спискС Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ (с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΈ). По смыслу это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ…ΡΡˆ-сумму класса. БоотвСтствСнно, ΠΏΡ€ΠΈ любом ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ класса Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСнится, ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ окаТСтся бСсполСзной.

ВсСгда Π»ΡƒΡ‡ΡˆΠ΅ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ serialVersionUID, ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅Ρ… Ρ€Π΅Π΄ΠΊΠΈΡ… случаях, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ вСрсиями. Бтандартная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° JDK serialver ΡƒΠΌΠ΅Π΅Ρ‚ Β«ΡƒΠ³Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒΒ» Π°Π²Ρ‚ΠΎ-Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Она ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ созданного Ρ€Π°Π½Π΅Π΅ класса.

Π―Π²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ устанавливаСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ static final long serialVersionUID.
πŸ‘10πŸ”₯3
πŸ˜¨Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ этот Ρ…Π°Ρ€Π΄ΠΎΠ²Ρ‹ΠΉ тСст для Java QA Engineer'ΠΎΠ² (Π½Π΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ²)? Π•Π³ΠΎ проходят всСго 30% 

πŸ‘‰ ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ тСст ΠΈΠ· 20 вопросов ΠΎΠ½Π»Π°ΠΉΠ½-курса Β«Java QA Engineer. ProfessionalΒ» ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, осилитС Π»ΠΈ Π²Ρ‹ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² OTUS. 

🟒 ΠŸΡ€ΠΎΠΉΡ‚ΠΈ тСст: https://otus.pw/sPZA/

πŸ’£Π’ΡΠ΅, ΠΊΡ‚ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ тСст, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ доступ ΠΊ записям ΡƒΡ€ΠΎΠΊΠΎΠ² курса для знакомства с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ обучСния ΠΈ спСц.Ρ†Π΅Π½Ρƒ Π½Π° курс.

πŸ’» Π—Π° 4 мСсяца обучСния Π½Π° курсС Π²Ρ‹ освоитС:
β€” популярныС инструмСнты Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ 
β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ спСктр Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ тСстирования Π½Π° Java
β€” ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ инструмСнты Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ UI- ΠΈ API-тСстирования
β€” Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с RestAssured ΠΈ JsonSchemaValidator
β€” Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Appium
β€” ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ тСстированиС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Selenoid

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО "ОВУБ ΠžΠΠ›ΠΠ™Π-ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π•". ИНН 9705100963. erid: LjN8JvwWN
πŸ‘5πŸ”₯1
Какими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ настраиваСтся сСриализация?

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Serializable пуст, Π½ΠΎ Π΅ΡΡ‚ΡŒ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² сСриализуСмый класс ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ измСнСния этапов процСсса сСриализации ΠΈ дСсСриализации.

readObjectNoData() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса-родитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ сСриализации ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ объяснСниС.

readObject(ObjectInputStream s) пСрСопрСдСляСт ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ readObject* ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° конструктор. Как ΠΈ конструктор, ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Как ΠΈ конструктор, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для поддСрТания ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² класса (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для случая дСсСриализации).

writeObject(ObjectOutputStream s) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для записи собствСнной сСриализационной Ρ„ΠΎΡ€ΠΌΡ‹.

Object readResolve() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π° ΠΏΡ€ΠΈ дСсСриализации. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сначала Π±ΡƒΠ΄Π΅Ρ‚ дСсСриализован, поэтому рСкомСндуСтся вмСстС с этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ всС поля transient. Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для наслСдника опрСдСляСт, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ наслСдник Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ.

Для ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ записи добавляСтся симмСтричный ΠΌΠ΅Ρ‚ΠΎΠ΄ Object writeReplace().

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Externalizable Π΄Π°Π΅Ρ‚ инструмСнт ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСриализации. Рассмотрим Π΅Π³ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… постах.
πŸ‘7
Как сСриализация Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с наслСдованиСм?

Когда Serializable класс ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΠΊΠ° эти Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ Ρ‚ΠΎΠΆΠ΅ Serializable, дСсСриализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ΄Π΅Ρ‚ ΠΎΡ‚ родитСля ΠΊ наслСднику, Π² ΠΎΠ±Ρ…ΠΎΠ΄ конструктора. ВмСсто Π½Π΅Π³ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ readObject (readObjectNoData). Но ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ встрСчаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ, Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс Serializable, инициализация для Π½Π΅Π³ΠΎ возвращаСтся Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ русло – вмСсто readObject вызываСтся конструктор Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если Ρ‚Π°ΠΊΠΎΠ³ΠΎ конструктора Π½Π΅Ρ‚, ΠΈΠ»ΠΈ ΠΎΠ½ объявлСн private, исполнСниС выбросит InvalidClassException.

ΠŸΡ€ΠΈ сСриализации нСсСриализуСмыС ΠΏΡ€Π΅Π΄ΠΊΠΈ просто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Если класс нСсСриализуСмый ΠΈ Π½Π΅ прСдоставляСт достаточного доступа ΠΊ своСму логичСскому ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ для наслСдников, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ наслСдника сСриализуСмым ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ‹ΠΉ вопрос Π½Π° Ρ‚Π΅ΠΌΡƒ – ΠΊΠ°ΠΊ ΠΊΠΎΠ³Π΄Π° ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΠ΅ΡˆΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса-наслСдника, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сСриализации Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ части. ЕдинствСнный способ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого – ΠΊΠ°ΡΡ‚ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ writeObject(), Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйс Externalizable.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ класса для наслСдования Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ serialization proxy (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассмотрим ΠΏΠΎΠ·Π΄Π½Π΅Π΅).
πŸ‘8