en
Feedback
Java | Ѐишки ΠΈ Ρ‚Ρ€ΡŽΠΊΠΈ

Java | Ѐишки ΠΈ Ρ‚Ρ€ΡŽΠΊΠΈ

Open in Telegram

Java: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, интСрСсныС Ρ„ΠΈΡˆΠΊΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ‚Ρ€ΡŽΠΊΠΈ ΠšΡƒΠΏΠΈΡ‚ΡŒ Ρ€Π΅ΠΊΠ»Π°ΠΌΡƒ: https://telega.in/c/java_tips_and_tricks ✍️По всСм вопросам: @Pascal4eg

Show more
6 821
Subscribers
-524 hours
-17 days
-5330 days
Posts Archive
Π˜Π½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк (string intern) - это процСсс хранСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ строки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Π² ΠΏΡƒΠ»Π΅ строк (str
Π˜Π½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк (string intern) - это процСсс хранСния ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ строки Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ экзСмплярС Π² ΠΏΡƒΠ»Π΅ строк (string pool) для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ использования памяти ΠΈ ускорСния сравнСния строк. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ строки ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π» строки (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "Hello, World!"), Java провСряСт, сущСствуСт Π»ΠΈ ΡƒΠΆΠ΅ такая строка Π² ΠΏΡƒΠ»Π΅ строк. Если ΠΎΠ½Π° Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ, Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр строки, ΠΈΠ½Π°Ρ‡Π΅ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΈ добавляСт Π΅Π³ΠΎ Π² ΠΏΡƒΠ» строк. Π˜Π½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк выполняСтся с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° intern(), доступного для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса String. Π’Ρ‹Π·ΠΎΠ² этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° строкС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Java провСряСт ΠΏΡƒΠ» строк Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ строки с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ содСрТаниСм. Если строка ΡƒΠΆΠ΅ сущСствуСт Π² ΠΏΡƒΠ»Π΅ строк, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ экзСмпляр. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ добавляСт Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку Π² ΠΏΡƒΠ» ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Π½Π΅Π΅. Π˜Π½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ мноТСство ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… строк, ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС памяти ΠΈΠ»ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ сравнСниС строк. Однако Π½Π΅ стоит ΠΈΠ½Ρ‚Π΅Ρ€Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ излишнСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° ΠΏΡƒΠ» строк ΠΈ нСэффСктивному использованию памяти.

⌨️ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ это процСсс задания Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Π­Ρ‚ΠΎΡ‚ процСсс Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ
⌨️ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ это процСсс задания Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. Π­Ρ‚ΠΎΡ‚ процСсс Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ 1⃣ БтатичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅: Ссли Π² классС Π΅ΡΡ‚ΡŒ статичСскиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² Ρ‚ΠΎΠΌ порядкС Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ΄ΡƒΡ‚ Π² ΠΊΠΎΠ΄Π΅. 2⃣ БтатичСский Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: Π΄Π°Π»Π΅Π΅ сработаСт Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. 3⃣ ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ экзСмпляра 4⃣ Π‘Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра 5⃣ ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ΄Π°: Static Variables initialized! Static Initialization Block initialized! Instance Variables initialized! Instance Initialization Block initialized! Constructor initialized! Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π² Java являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ аспСктом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ находятся Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ состоянии ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм. ПониманиС порядка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ошибок ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Java.

volatile - это ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово volatile ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈ синхронизациСй Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Когда пСрСмСнная объявлСна ΠΊΠ°ΠΊ volatile, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния ΠΈ записи этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π±ΡƒΠ΄ΡƒΡ‚ синхронизированы ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Гарантированная Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Когда пСрСмСнная ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π° ΠΊΠ°ΠΊ volatile, ΠΎΠ½Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ обСспСчиваСт Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΅Π΅ значСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ссли ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ volatile ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ увидят это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Ρ… сцСнариях, ΠΊΠΎΠ³Π΄Π° нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Однако стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ volatile Π½Π΅ прСдоставляСт атомарности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ выполняСтС слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ атомарности (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚), Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ синхронизации, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. πŸ“Œ volatile являСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для обСспСчСния видимости ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π±Π΅Π· использования Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ. Однако Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв синхронизация с использованиСм synchronized ΠΈΠ»ΠΈ java.util.concurrent Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ подходящим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

Optional прСдставляСт собой класс, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² Java 8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, связанными с отсутствиСм
Optional прСдставляСт собой класс, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² Java 8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, связанными с отсутствиСм значСния (null) ΠΈ обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ ΠΈ Ρ‡ΠΈΡΡ‚ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ основныС ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ прСимущСства, связанныС с Optional: 1⃣ ИзбавлСниС ΠΎΡ‚ NullPointerException: Одной ΠΈΠ· основных Π·Π°Π΄Π°Ρ‡ Optional являСтся ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ NullPointerException, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пытаСмся ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈΠ»ΠΈ полям ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ оказываСтся null. 2⃣ Π―Π²Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° отсутствиС значСния: Optional позволяСт явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ, ΠΈ прСдоставляСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этого случая. 3⃣ БСзопасныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ: ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ Optional, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ isPresent(), ifPresent(), orElse(), orElseGet(), orElseThrow(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присутствуСт, ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ отсутствуСт. ИспользованиС Optional способствуСт Π±ΠΎΠ»Π΅Π΅ чистому ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ сниТаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибок, связанных с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями. Однако слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Optional Π½Π΅ всСгда являСтся Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ, ΠΈ Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это ΠΈΠΌΠ΅Π΅Ρ‚ смысл с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ вашСго прилоТСния.

⌨️ Nashorn 🦏 β€” это Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° языкС программирования Java ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Oracle, Π° Π·Π°Ρ‚Π΅ΠΌ сообщСством
⌨️ Nashorn 🦏 β€” это Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° языкС программирования Java ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Oracle, Π° Π·Π°Ρ‚Π΅ΠΌ сообщСством OpenJDK. Nashorn Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² JDK Π² вСрсии Java 8 ΠΈ Π΄ΠΎ Java 14. Π‘ Java 15 Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ явно. ИсполнСниС JavaScript ΠΊΠΎΠ΄Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Java прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ: 1⃣ Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ: Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JavaScript для динамичСского настраиваСмого повСдСния вашСго Java прилоТСния. Π­Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Java. 2⃣ ΠŸΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°: Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ JavaScript ΠΊΠΎΠ΄, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° Java. 3⃣ ИспользованиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: JavaScript ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ³Π°Ρ‚ΡƒΡŽ экосистСму Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Java прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ возмоТности. Из ΠΊΠΎΠ΄Π° Java Π² JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. Π’Π°ΠΊ ΠΆΠ΅ Π² JavaScript ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Java классы. πŸ“Œ Однако слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ интСграция JavaScript ΠΈ Java ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ слоТности с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ошибок, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠΎΠΉ. Π’Π°ΠΊΠΆΠ΅, ΠΏΠ΅Ρ€Π΅Π΄ использованиСм JavaScript Π² Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, стоит ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ способы Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ.

πŸ› οΈ БистСмы сборки Π² ΠΌΠΈΡ€Π΅ Java β€” это Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ эффСктивнСС. Π§Ρ‚ΠΎ Π±Ρ‹ ваш ΠΊΠΎΠ΄ стал Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ .war ΠΈΠ»ΠΈ .jar Ρ„Π°ΠΉΠ». 1️⃣ Apache Ant: Ant β€” это классичСская систСма сборки Java, основанная Π½Π° XML. Она обСспСчиваСт Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ процСссом сборки, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ настройки Π² сравнСнии с Maven ΠΈ Gradle. БчитаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈ практичСски Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² соврСмСнных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. 2️⃣ Apache Maven: Π­Ρ‚Π° систСма сборки извСстна своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° основС управляСмых ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (POM), Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями ΠΈ сборку ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Maven Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΎΠ±ΡˆΠΈΡ€Π½ΡƒΡŽ Π±Π°Π·Ρƒ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ происходит Π² pom.xml Ρ„Π°ΠΉΠ»Π°Ρ…, соотвСтствСнно Π² xml Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнной систСмой сборки. 3️⃣ Gradle: Gradle прСдоставляСт Π³ΠΈΠ±ΠΊΡƒΡŽ ΠΈ ΠΌΠΎΡ‰Π½ΡƒΡŽ систСму сборки с использованиСм Groovy DSL. Он позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ собствСнныС Π·Π°Π΄Π°Ρ‡ΠΈ сборки ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Gradle Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ сборку, Ρ‡Ρ‚ΠΎ ускоряСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ. БчитаСтся Π±ΠΎΠ»Π΅Π΅ соврСмСнной систСмой ΠΏΠΎ сравнСнии с Apache Maven ΠΈ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ часто ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с использованиСм этой систСмы сборки. Π’Ρ‹Π±ΠΎΡ€ систСмы сборки зависит ΠΎΡ‚ Π²Π°ΡˆΠΈΡ… потрСбностСй ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅, ΠΎΠ½ΠΈ всС ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ваш процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Java.

Weak Reference: Блабая связь с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π’ ΠΌΠΈΡ€Π΅ Java, WeakReference - это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Он позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ автоматичСски ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ сборщиком мусора, Ссли Π½Π° Π½ΠΈΡ… большС Π½Π΅Ρ‚ ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… ссылок (обычная ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚). Π§Π΅ΠΌ это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ? Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти Π² прилоТСниях, Π³Π΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ, Π½ΠΎ всС Π΅Ρ‰Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ ссылки. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования WeakReference: WeakReference<MyObject> weakRef = new WeakReference<>(new MyObject()); Когда Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… ссылок Π½Π° MyObject, сборщик мусора автоматичСски ΡƒΠ΄Π°Π»ΠΈΡ‚ Π΅Π³ΠΎ, освобоТдая ΠΏΠ°ΠΌΡΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС рСсурсов ΠΈ ΡΠ½ΠΈΠΆΠ°Ρ‚ΡŒ риск ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ памяти. WeakReference - это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Java, ΠΈ Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΌ, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обСспСчСния эффСктивного управлСния рСсурсами. #WeakReference #Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠŸΠ°ΠΌΡΡ‚ΡŒΡŽ

πŸš€πŸ§΅ Гармония Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅ Java: Thread-Safe Π’ ΠΌΠΈΡ€Π΅ Java, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² - это Π½ΠΎΡ€ΠΌΠ°. Однако Π±Π΅Π· Π΄ΠΎΠ»ΠΆΠ½Ρ‹Ρ… ΠΌΠ΅Ρ€ прСдостороТности, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π³ΠΎΠ½ΠΊΠΈ (race condition) ΠΈ ошибкам. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Thread-Safe. Thread-Safe ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ бСзопасно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ· мноТСства ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½Π΅ вызывая Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ². Как Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Thread-Safety: Бинхронизация: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ synchronized ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ (Locks), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡ‚ΠΎΠΊ обращаСтся ΠΊ рСсурсу Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ИспользованиС нСизмСняСмых (immutable) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС ΠΈΡ… создания, ΡΠ²Π»ΡΡŽΡ‚ΡΡ потокобСзопасными ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ потокобСзопасныС структуры Π΄Π°Π½Π½Ρ‹Ρ…: Java прСдоставляСт Ρ‚Π°ΠΊΠΈΠ΅ структуры, ΠΊΠ°ΠΊ ConcurrentHashMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ спроСктированы для бСзопасного ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа. АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ java.util.concurrent.atomic для Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Π“Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠ΅ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: Π£Ρ‡Ρ‚ΠΈΡ‚Π΅ порядок выполнСния ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ВСстированиС: ΠŸΠΈΡˆΠΈΡ‚Π΅ тСсты для обнаруТСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. Thread-Safe ΠΊΠΎΠ΄ - это Π·Π°Π»ΠΎΠ³ бСзопасности ΠΈ эффСктивности Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ Java. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ ΠΎΠ± этом, разрабатывая ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния. #ThreadSafety

Какой Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅?
Anonymous voting

Π£Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ - это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. К ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°
Π£Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ - это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. К ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ относятся: +, -, ! А Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΏΡ€Π΅-ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ пост-ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. - (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ смСны Π·Π½Π°ΠΊΠ°) БобствСнно это всё Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ - мСняСт Π·Π½Π°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π•Ρ‰Ρ‘ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт ΠΎΡ‚ примСнСния этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, это ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π΄ΠΎ int, Π² случаС Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ byte, short ΠΈΠ»ΠΈ char. ! - ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ логичСской инвСрсии. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ° boolean ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· true Π² false ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° (++) ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π° (--) ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ цСлочислСнным ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ двумя вариациям: пост-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚/Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ (i++ ΠΈ i--) ΠΏΡ€Π΅-ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚/Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ (++i ΠΈ --i) Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ вариациями Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ++i ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° i++ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ + ? Π”Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт ΠΊΠ°ΠΊ ΠΈ ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΉ -.

Varargs (Variable Arguments List, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉΡΡ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) β€” это способ создания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈ
Varargs (Variable Arguments List, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΉΡΡ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) β€” это способ создания ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (ΠΎΡ‚ нуля ΠΈ Π±ΠΎΠ»Π΅Π΅). Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ появилась Π² JDK 5. Π—Π°ΠΏΠΈΡΡŒ Π²ΠΈΠ΄Π° Object... args ΠΈ Π΅ΡΡ‚ΡŒ varargs. ΠŸΡ€ΠΈ этом Ρ‚Ρ€ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ послС Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ массив, Ρ‚Π°ΠΊ ΠΈ Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², записанных Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ, которая всС Ρ€Π°Π²Π½ΠΎ прСобразуСтся Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив - Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» компилятор Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° нСявно замСняСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ массивом. Π£ΠΆΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ varargs ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ varargs являСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ массива Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Varargs Π±Ρ‹Π» создан с Ρ†Π΅Π»ΡŒΡŽ упрощСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ программиста, удобства ΠΈ краткости ΠΊΠΎΠ΄Π°. πŸ“Œ Π’ качСствС ограничСния любой ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ varargs Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² СдинствСнном числС ΠΈ строго послСдним Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ.

πŸ”„ БСсконСчныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Stream ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ бСсконСчных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: iterate() ΠΈ generate()
πŸ”„ БСсконСчныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Stream ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ бСсконСчных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²: iterate() ΠΈ generate(). iterate(final T seed, final UnaryOperator<T> f) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ бСсконСчный ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ упорядочСнный ΠΏΠΎΡ‚ΠΎΠΊ, созданный ΠΏΡƒΡ‚Π΅ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΠΊ исходному элСмСнту Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния, создавая ΠΏΠΎΡ‚ΠΎΠΊ, состоящий ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ числа, f(Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число), f(f(Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ число)) ΠΈ Ρ‚. Π΄. generate(Supplier<? extends T> s) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ бСсконСчный ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ нСупорядочСнный ΠΏΠΎΡ‚ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт создаСтся прСдоставлСнным поставщиком (Supplier). Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ константных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² случайных элСмСнтов ΠΈ Ρ‚. Π΄. πŸ“Œ ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с бСсконСчными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, ΠΊΡ€Π°ΠΉΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ limit() ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ½Π°Ρ‡Π΅ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ бСсконСчно.

Stream ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Stream дСлятся Π½Π° ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ состоит ΠΈΠ· источника (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, массива, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΊΠ°Π½Π°Π»Π° Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° бСсконСчной ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ) Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ πŸ“Œ ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° какая-Π»ΠΈΠ±ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ опСрация. Они ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ выполнСния Stream. ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ Stream ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ: filter() map() flatMap() distinct() sorted() peek() limit() skip() ВсС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌΠΈ, поэтому ΠΎΠ½ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ понадобится. По сути, ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ фактичСски Π½Π΅ выполняСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° вмСсто этого создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ содСрТит элСмСнты исходного ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρƒ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±Ρ…ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π΅ начинаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ опСрация ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Π°. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅ свойство, особСнно Π²Π°ΠΆΠ½ΠΎΠ΅ для бСсконСчных ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ позволяСт Π½Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ фактичСски Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡ‚ΠΎΠΊ для получСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½ΠΎΠ³ΠΎ эффСкта. πŸ“Œ ПослС выполнСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ считаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: forEach() forEachOrdered() toArray() reduce() collect() min() max() count() anyMatch() allMatch() noneMatch() findFirst() findAny() КаТдая ΠΈΠ· этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ запроса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π‘Π” Если Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ Π’Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ REST-сСрвис, Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ запросами. Π§Ρ‚ΠΎ имССтся Π² Π²ΠΈΠ΄Ρƒ? Объясню Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π’Π΅Π±-страницы с ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ. По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π½Π° бэкСнд отправляСтся запрос. Запрос, соотвСтствСнно, синхронный ΠΈ ΠΏΠΎΠΊΠ° сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ страницу. Если это происходит ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ запрос завис ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ случайно. Какая Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°? Если это, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ запрос Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ Π² ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈ Π½Π΅Ρ‚, Π½ΠΎ Ссли это дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма нСприятныС послСдствия. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π΅ собрана ΠΊΠΎΡ€Π·ΠΈΠ½Π° ΠΈ создан Π·Π°ΠΊΠ°Π· Π½Π° ΠΎΠΏΠ»Π°Ρ‚Ρƒ (статус REGISTERED), Π΄Π°Π»Π΅Π΅ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ "ΠΎΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ" с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΡΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ дСньги ΠΈ пСрСводят Π·Π°ΠΊΠ°Π· Π² статус ΠΎΠΏΠ»Π°Ρ‡Π΅Π½ (PAID). И Ссли Π² этом процСссС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Ρ‘Ρ‚ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ запрос, Ρ‚ΠΎ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΠΈΡΠ°Ρ‚ΡŒ дСньги Π·Π° Π·Π°ΠΊΠ°Π· Π΄Π²Π° Ρ€Π°Π·Π°. Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ

🧩 ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² Predicate - встроСнный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² Java 8 Π² ΠΏΠ°ΠΊΠ΅Ρ‚ java.util.function
🧩 ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ΠΎΠ² Predicate - встроСнный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² Java 8 Π² ΠΏΠ°ΠΊΠ΅Ρ‚ java.util.function. ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, провСряСт состояниС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ boolean Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ составныС условия. Π£ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π° Π΅ΡΡ‚ΡŒ 3 default ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для составлСния условия. ИмСна ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² говорящиС: and(), or(), negate()

πŸ“ Π—Π°ΠΏΠΈΡΡŒ (record) β€” это класс, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом record вмСсто ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class. Π—Π°ΠΏΠΈΡΡŒ слуТит ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ
πŸ“ Π—Π°ΠΏΠΈΡΡŒ (record) β€” это класс, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом record вмСсто ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class. Π—Π°ΠΏΠΈΡΡŒ слуТит ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ нСизмСняСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ описания DTO (Data Transfer Object). Класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилятор создаСт для вас ΠΏΡ€ΠΈ создании записи, являСтся ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ (final). Π­Ρ‚ΠΎΡ‚ класс Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ класс java.lang.Record. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ваша запись Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ класс. Π—Π°ΠΏΠΈΡΡŒ, ΠΊΠ°ΠΊ ΠΈ класс, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ любоС количСство интСрфСйсов. Π‘Π»ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт сразу Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ записи, β€” (int x, int y) ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ записи. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° записи компилятор создаСт private final ΠΏΠΎΠ»Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа ΠΊ Π½Π΅ΠΌΡƒ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’ записи ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСно любоС количСство ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ сам создаёт конструктор со всСми пСрСчислСнными ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ записи, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ toString(), equals() ΠΈ hashCode() с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. record появился Π² Java 16.

Sentry for Java β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ инструмСнт, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибками, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ
Sentry for Java β€” это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ инструмСнт, ΠΏΡ€ΠΈΠ·Π²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ошибками, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΈ сбоями Π² прилоТСниях Java. Sentry интСгрируСтся с вашими Java-прилоТСниями, позволяя Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Он прСдоставляСт ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ контСкстС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ошибки, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ трассировки стСка, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ быстро Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΠΎΠ±Ρ‰ΡƒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ удобство использования своих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Ошибки ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Sentry собСрёт автоматичСски, Π° Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ: } catch (Exception e) { Sentry.addBreadcrumb("readFile"); Sentry.captureException(e); } ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ sentry-spring-boot-starter ΠΈ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅ sentry.dsn

Java | Ѐишки ΠΈ Ρ‚Ρ€ΡŽΠΊΠΈ - Statistics & analytics of Telegram channel @java_tips_and_tricks