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

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

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

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Как ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄?

Π‘Π°ΠΉΡ‚ΠΊΠΎΠ΄ – Π°Π½Π°Π»ΠΎΠ³ машинного ΠΊΠΎΠ΄Π° для JVM. Он получаСтся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции исходного .java Ρ„Π°ΠΉΠ»Π° ΠΈ хранится Π² .class Ρ„Π°ΠΉΠ»Π΅. Анализ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π² исслСдовании Π±Π°Π³Π°, ΠΈΠ»ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Он Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ с инструмСнтами динамичСской манипуляции Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ΠΎΠΌ, Π²Ρ€ΠΎΠ΄Π΅ ASM ΠΈΠ»ΠΈ BCEL.

Π­Ρ‚ΠΎ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ простым тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚. Π’ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ JDK доступСн инструмСнт javap. Π­Ρ‚ΠΎ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для чтСния .class Ρ„Π°ΠΉΠ»ΠΎΠ².

АргумСнтами пСрСдаСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ имя класса, ΠΈ classpath Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ этот класс ΠΈΡΠΊΠ°Ρ‚ΡŒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ объявлСния ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ². ΠšΠ»ΡŽΡ‡ -p Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля; -v Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅; -c ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ сам Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ – ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².


Java GuruπŸ€“ #java
πŸ‘14πŸ”₯5❀3
ΠžΡ‚ Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ NoSuchMethodError?

Как ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· названия, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° пытаСтся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ сущСствуСт. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС Π΅Ρ‰Π΅ Π½Π° этапС компиляции. Но Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ становится извСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, ΠΈ Ρ‚ΠΎΠ³Π΄Π° выбрасываСтся это ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ‚Π°ΠΊΠΈΡ… ситуаций Π΄Π²Π°. Π›ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΈ частично ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½; Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° нСсовмСстима с внСшнСй Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒΡŽ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия jar-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² classpath.

Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NoSuchMethodError наслСдуСтся ΠΎΡ‚ LinkageError. ВсС Ρ‚Π°ΠΊΠΈΠ΅ ошибки – ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ нСсовмСстимых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ послС компиляции класса.

НС слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ с NoSuchMethodException – ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ случаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Reflection API. Π’Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Error, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.


Java GuruπŸ€“ #java
πŸ”₯14πŸ‘3❀2
Π’ Ρ‡Ρ‘ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ, AOT ΠΈ JIT-компилятором?

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡ – простоС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ воспроизвСдСниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

AOT-компиляция (ahead-of-time, статичСская) – процСсс прСвращСния тСкста Π½Π° языкС программирования Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° машинном языкС. Π’Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ языки Π²Ρ€ΠΎΠ΄Π΅ C++. Π’ соврСмСнных JDK ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ настоящий ahead-of-time скомпилированный ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ jaotc.

JIT-компиляция (just-in-time, динамичСская) – «умная» интСрпрСтация. Π‘Ρ€Π΅Π΄Π° выполнСния Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ исполняСмый ΠΊΠΎΠ΄, оптимизируя часто Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ участки. Π’Π°ΠΊΠΈΠΌ способом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС, ΠΈ сохраняСт ΠΏΡ€ΠΈ этом прСимущСства ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-нСзависимости ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ИмСнно с JIT-компиляциСй связана Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Β«ΠΏΡ€ΠΎΠ³Ρ€Π΅Π²Π°Β» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠ΅Ρ€Π΅Π΄ тСстированиСм ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π­Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ относятся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ JVM, Π½ΠΎ ΠΈ ΠΊΠΎ мноТСству Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π² Java Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ – ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ. Но Π² JVM ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ JIT-компилятор. А процСсс компиляции Java-ΠΊΠΎΠ΄Π° Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ AOT-компиляциСй.

Для взаимодСйствия с JIT-компилятором ΠΈΠ· ΠΊΠΎΠ΄Π° Π² JDK поставляСтся класс java.lang.Compiler. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ disable() ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ JIT ΠΈ пСрСвСсти ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Ρ€Π΅ΠΆΠΈΠΌ простой ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ. БСйчас этот класс объявлСн ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ готовится ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ.

Π‘ΠΎΠ»Π΅Π΅ красивый способ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° компилятор – ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ JVM. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -Djava.compiler=NONE Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с JIT Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, Ρ‡Π΅Ρ€Π΅Π· этот ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ JIT-компилятор, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ встроСнному Π² JVM.


Java GuruπŸ€“ #java
πŸ”₯8❀7πŸ‘3
πŸ’» МодСли мСТсСрвисного взаимодСйствия

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ микросСрвисами ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ.

πŸ—“ 28 мая Π² 20:00 МБК
πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса Β«Software ArchitectΒ».

На Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

βœ”οΈ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ Ρ‚ΠΈΠΏΡ‹ мСТсСрвисного взаимодСйствия.
βœ”οΈ Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹Π΅ ΠΈ асинхронныС ΠΌΠΎΠ΄Π΅Π»ΠΈ взаимодСйствия: ΠΏΠ»ΡŽΡΡ‹ ΠΈ минусы.
βœ”οΈ ИспользованиС API Gateway ΠΈ Service Mesh для управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ.
βœ”οΈ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ взаимодСйствия.
βœ”οΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ мСТсСрвисного взаимодСйствия Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Π’Π΅Π±ΠΈΠ½Π°Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½:
- Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ с микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ.
- АрхитСкторам ПО, стрСмящимся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСТсСрвисноС взаимодСйствиС.
- Backend ΠΈ Fullstack Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, заинтСрСсованным Π² ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами.
- DevOps-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΌ Π·Π° Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ микросСрвисами.

🎁 ВсСм участникам Π²Π΅Π±ΠΈΠ½Π°Ρ€Π° Π΄Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - SoftwareArc_06

πŸ‘‰ РСгистрация Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€: https://vk.cc/cMcspS

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘3❀2πŸ”₯2
Π§Π΅ΠΌ отличаСтся interface ΠΎΡ‚ @⁠interface?

Π‘Ρ€Π΅Π΄ΠΈ интСрфСйсов выдСляСтся особая Π³Ρ€ΡƒΠΏΠΏΠ°, которая Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ интСрфСйса – Serializable. Π’Π°ΠΊΠΈΠ΅ интСрфСйсы Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ классу Π½Π΅ΠΊΡƒΡŽ сСмантику, которая ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСфлСксии (ΠΈ instanceof), Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Π° ΠΊΠ°ΠΊ информация для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹Π΅ интСрфСйсы. ΠœΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс прСдставляСт ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ класса.

Начиная с Java 1.5 Π² языкС появился Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΎΠ² – Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Они Π±Π΅Ρ€ΡƒΡ‚ Π½Π° сСбя ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ возмоТности ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½ΠΎΠ³ΠΎ интСрфСйса:
1. МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ классу ΠΈΠ»ΠΈ интСрфСйсу, Π½ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ, ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список прСдставлСн Π² пСрСчислСнии ElementType;
2. Аннотация ΠΌΠΎΠΆΠ΅Ρ‚ нСсти Π΄Π°Π½Π½Ρ‹Π΅ Π² своих элСмСнтах
3. Аннотация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходникС, Π½Π΅ ΠΏΠΎΠΏΠ°Π² Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ вовсС. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ Π΅Π΅ RetentionPolicy;
4. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π½Π΅ наслСдуСмой, просто Π½Π΅ помСчая Π΅Π΅
@Inherited;
5. И ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, синтаксис. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Π°Ρ аннотация с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда отличаСтся ΠΎΡ‚ настоящих интСрфСйсов.

Joshua Block Π² Π³Π»Π°Π²Π΅ 37 Effective Java выдСляСт Π΄Π²Π° прСимущСства ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹Ρ… интСрфСйсов ΠΏΠ΅Ρ€Π΅Π΄ аннотациями Π½Π° этапС компиляции:
1. МоТно Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс – это Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΈΠΏ;
2. МоТно ΡΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ, сдСлав интСрфСйс ΠΈΡ… наслСдником.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ вопросу, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово
@interface ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, interface – интСрфСйс.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции Π² .class-Ρ„Π°ΠΉΠ»Π΅ аннотация прСвращаСтся Π² интСрфСйс-наслСдник java.lang.annotation.Annotation, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ΠΎΠΌ ACC_ANNOTATION. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π­Ρ‚ΠΈΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ синтаксис объявлСния. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½Ρ‹Π΅ для Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ описаны Π² JVMS 4.7.16-4.7.22.

К слову, конструкции Π²ΠΈΠ΄Π°
@something Π² javadoc Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэгами. Они выглядят ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ тСхничСски Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ с Π½ΠΈΠΌΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ.

Java GuruπŸ€“ #java
❀8πŸ‘7πŸ”₯3❀‍πŸ”₯1πŸ•Š1
Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ?

Π£Π΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ случаи примСнСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡ… свойства RetentionPolicy:

SOURCE – аннотация присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходном ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π½Π΅ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π° Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. МоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

ΠŸΠ΅Ρ€Π²Π°Ρ – Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для программиста, Π° Π½Π΅ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ всСвозмоТныС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹. Они Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ элСмСнтам Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ сСмантику. Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ –
@Immutable ΠΈ @ThreadSafe ΠΈΠ· Hibernate.

Вторая катСгория – инструкции для инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ,
@SuppressWarnings ΠΈ @Override ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° прСдупрСТдСния ΠΈ ошибки компиляции. IntelliJ IDEA ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ @Nullable ΠΈ @NonNull ΠΈΠ· Spring Framework, ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… NullPointerException.

CLASS – самоС экзотичСскоС, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ стандартноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Аннотация ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ .class-Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ игнорируСтся Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ классов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ такая аннотация нСдоступна для Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сторонних инструмСнтов, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для обфускаторов.

RUNTIME – самоС Ρ…ΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ЦСль снабТаСтся ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, доступной Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС аннотация всё Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ добавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ повСдСния. Для практичСской ΠΏΠΎΠ»ΡŒΠ·Ρ‹ runtime-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ исполнСн Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ процСссинга, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ инструмСнтами Reflection API. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ мноТСствС популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²: Spring, Hibernate, Jackson.


Java GuruπŸ€“ #java
❀10πŸ‘6πŸ”₯3
πŸ” ΠžΡΠ½ΠΎΠ²Ρ‹ сТатия Π΄Π°Π½Π½Ρ‹Ρ…: создаСм RLE Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€

ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ.

πŸ—“ 28 мая Π² 20:00 МБК
πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса «Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…Β».

На этом Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнный Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Π½Π° Java. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π±Π°Π·ΠΎΠ²ΡƒΡŽ структуру ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ RLE (ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½ сСрий) для сТатия Π΄Π°Π½Π½Ρ‹Ρ…. Π˜Π·ΡƒΡ‡ΠΈΠΌ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡƒΡŽ, Ρ‚Π°ΠΊ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ RLE.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° этот простой ΠΌΠ΅Ρ‚ΠΎΠ΄ сТатия Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивно.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠΈΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сТатия Π΄Π°Π½Π½Ρ‹Ρ… для всСх, ΠΊΡ‚ΠΎ интСрСсуСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ….

🎁 ВсСм участникам Π²Π΅Π±ΠΈΠ½Π°Ρ€Π° Π΄Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - Algo5

πŸ‘‰ РСгистрация Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€: https://vk.cc/cMeuS9

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘4❀2πŸ”₯2
МоТно Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ?

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

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

Π‘ΠΎ стороны Reflection ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ явно – ΠΌΠ΅Ρ‚ΠΎΠ΄ getAnnotationsByType ΠΏΡ€ΠΈ нСобходимости Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅Ρ‚ этот ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.


Java GuruπŸ€“ #java
πŸ‘9❀4πŸ”₯4
πŸ‘©β€πŸ’» Java Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° - Ρ‚ΠΎΠΏΠΎΠ²ΠΎΠ΅ сообщСство Senior Java Developer, Π³Π΄Π΅ ΠΎΠ½ дСлится совСтами, ΡΡ‚Π°Ρ‚ΡŒΡΠΌΠΈ ΠΈ Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠ°ΠΌΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ стали Ρ‚ΠΎΠΏΠΎΠ²Ρ‹ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ!

πŸ‘©β€πŸ’» Android Developer - ΠΊΠ°Π½Π°Π» для Π°Π½Π΄Ρ€ΠΎΠΈΠ΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²! Π‘Ρ‚Π°Ρ‚ΡŒΠΈ, вопросы ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ с собСсСдований, Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ.

πŸ‘©β€πŸ’» Kotlin Developer - самый Ρ‚ΠΎΠΏΠΎΠ²Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» для ΠΊΠΎΡ‚Π»ΠΈΠ½ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°!

πŸ“• Книги для Java программиста - ΠΊΠ°Π½Π°Π» с ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ ΠΏΠΎ Java. ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎ выходят Π½ΠΎΠ²ΠΈΠ½ΠΊΠΈ ΠΊΠ°ΠΊ Π½Π° русском Ρ‚Π°ΠΊ ΠΈ Π½Π° английском языкС!

πŸ“° Java News - ΠΊΠ°Π½Π°Π» с послСдними новостями ΠΈΠ· ΠΌΠΈΡ€Π° Java!
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘2❀1πŸ”₯1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Type Erasure?

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

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

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

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

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² позволяСт Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π½ΠΎΠ²Ρ‹Π΅ классы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, шаблонов C++.


Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘12πŸ”₯3❀1
Как ограничиваСтся Ρ‚ΠΈΠΏ 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

Java GuruπŸ€“ #java
πŸ‘7❀4πŸ”₯3
πŸ”₯ Π₯Π°Ρ€Π΄ΠΊΠΎΡ€Π½Ρ‹ΠΉ тСст для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‚ΠΈΠΌΠ»ΠΈΠ΄ΠΎΠ² ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²!

πŸ’» ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° 11 вопросов ΠΈ ΡƒΠ·Π½Π°ΠΉΡ‚Π΅, достаточно Π»ΠΈ Ρƒ вас Π·Π½Π°Π½ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½-курс Β«Software ArchitectΒ» Π² OTUS ΠΏΠΎ спСц.Ρ†Π΅Π½Π΅.

🦾 ΠšΡƒΡ€Ρ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Ρ‚ΡŒ вСсь арсСнал Π½Π°Π²Ρ‹ΠΊΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€Ρƒ ПО.

❇️ ΠŸΡ€ΠΎΠΉΡ‚ΠΈ тСст - https://vk.cc/cMjdJx

πŸ’£ Π—Π½Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ построСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ β€” это Ρ‚ΠΎΠΏ-ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ для программистов Π² 2025 Π³ΠΎΠ΄Ρƒ. Π—Π° 4 мСсяца обучСния Π²Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ качСства ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, микросСрвисов, Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ML Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ².

🎁 Для получСния спСц.Ρ†Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - SoftwareArc_06

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

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ/ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² – это сохранСниС/ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ порядка наслСдования для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Ρ… сущностСй Ρ‚ΠΈΠΏΠ°ΠΌΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ наслСдник, ΠΎΠ½ΠΈ сами становятся ΠΊΠ°ΠΊ Π±Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΈ наслСдником. ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, становятся наслСдником ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ.

Π›Π΅Π³Ρ‡Π΅ всСго ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ эти понятия Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:
🟒 ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: List<Integer> ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° List<? extends Number> (ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ наслСдник List<Number>).
🟒 ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° List<Number>#sort Ρ‚ΠΈΠΏΠ° Comparator<? super Number> ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Comparator<Object> (ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Comparator<Number>)

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Β«ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒΒ» – Π½Π΅ совсСм наслСдованиС, Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ совмСстимыми (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Β«is aΒ»).

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ связанноС понятиС – ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ – это отсутствиС свойств ковариантности ΠΈ контрвариантности. Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π±Π΅Π· Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹: List<Number> нСльзя ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° List<Double>, Π½ΠΈ Π² List<Object>.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹: Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° String[].

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² начиная с Java 5 ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.


Java GuruπŸ€“ #java
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯8πŸ‘4❀2
πŸ“Š ΠŸΡ€ΠΈΠ³Π»Π°ΡˆΠ°Π΅ΠΌ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ RLE Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€Π° Π½Π° Java

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сТатия Π΄Π°Π½Π½Ρ‹Ρ…?
Π’ нашСм Π²Π΅Π±ΠΈΠ½Π°Ρ€Π΅ ΠΌΡ‹ шаг Π·Π° шагом создадим Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚ΠΎΡ€ Π½Π° Java, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ RLE. Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ интСрфСйс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ самыС эффСктивныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ сТатия.

ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ Π½Π°ΠΌ ΠΈ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ΡΡŒ Π² ΠΌΠΈΡ€ программирования ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²!

πŸ—“ 28 мая Π² 20:00 МБК
πŸ†“ БСсплатно. Π£Ρ€ΠΎΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… старта курса «Алгоритмы ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…Β».

🎁 ВсСм участникам Π²Π΅Π±ΠΈΠ½Π°Ρ€Π° Π΄Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - Algo5

πŸ‘‰ РСгистрация Π½Π° Π²Π΅Π±ΠΈΠ½Π°Ρ€: https://vk.cc/cMkNgT

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

Π’ Java отсутствуСт ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ – ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС. Когда Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ конкрСтизируСтся Π² наслСдникС, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ этого Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Ρ‚ΠΈΠΏΠ° большС Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π΅ – Π² наслСдникС Ρ‚ΠΈΠΏ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ, Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ стСртый Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ простым ΠΈ бСзопасным кастом. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт ΠΏΠΎ сигнатурС с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ. Π’ Π΅Π³ΠΎ Ρ‚Π΅Π»Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ кастуСтся ΠΈ Π²Ρ‹Π·ΠΎΠ² дСлСгируСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΈ называСтся bridge ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

Bridge method ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°. Π•Π³ΠΎ имя совпадаСт с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сотрСтся Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ родитСля. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Ρ„Π»Π°Π³ΠΎΠΌ synthetic, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ написан Π½Π΅ программистом Π° компилятором.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.


Java GuruπŸ€“ #java
πŸ”₯13πŸ‘5❀3
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 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.

Java GuruπŸ€“ #java
πŸ‘8πŸ”₯5❀3
Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ²?

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

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

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

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

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

Π’ΠΈΠΏΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² лямбда-выраТСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ. Π‘ Java 11 вмСсто Ρ‚ΠΈΠΏΠ° указываСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово var. Π’Π°ΠΊΠΎΠΉ синтаксис Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.


Java GuruπŸ€“ #java
❀7πŸ‘5πŸ”₯3
πŸ‘©β€πŸ’» Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ стандартных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅? Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² JVM, многопоточности ΠΈ соврСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ…?

πŸ”₯ ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅, курс Β«Java Developer. ProfessionalΒ» β€” это 96 часов ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ ΠΎΡ‚ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… экспСртов ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Spring WebFlux, Kafka, Kubernetes.

ПослС обучСния Π²Ρ‹ смоТСтС Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ слоТныС Java-прилоТСния уровня Middle+, ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ JVM ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ чистый, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄.

🎁 Π”Π°Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ скидку Π½Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - JAVA_06

➑️ ΠŸΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π²ΡΡ‚ΡƒΠΏΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ тСстированиС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ скидку: https://vk.cc/cMooLF

Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
❀3πŸ‘2πŸ”₯2
Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ArrayStoreException?

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

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

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


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

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

// Ошибка компиляции – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹!
List<Object> x = new ArrayList<String>();


Java GuruπŸ€“ #java
❀7πŸ”₯4πŸ‘3
МоТно Π»ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ generic-Ρ‚ΠΈΠΏΠ°?

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

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

class MyClass<T extends IOException> {
void foo() throws T {
// ...
}
}


Java GuruπŸ€“ #java
πŸ‘11πŸ”₯3