Java | Π€ΠΈΡΠΊΠΈ ΠΈ ΡΡΡΠΊΠΈ
Open in Telegram
Java: ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΡΠΊΠΈ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠΊΠΈ ΠΡΠΏΠΈΡΡ ΡΠ΅ΠΊΠ»Π°ΠΌΡ: https://telega.in/c/java_tips_and_tricks βοΈΠΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ: @Pascal4eg
Show more6 821
Subscribers
-524 hours
-17 days
-5330 days
Posts Archive
ΠΠ½ΡΠ΅ΡΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ (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, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π±ΠΎΡΡΠ±Ρ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌΠΈ Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (null) ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΠΈ ΡΠΈΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Optional:
1β£ ΠΠ·Π±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ NullPointerException: ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π·Π°Π΄Π°Ρ Optional ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ NullPointerException, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ null.
2β£ Π―Π²Π½ΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: Optional ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌ, ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ.
3β£ ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ: ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ Π²Π½ΡΡΡΠΈ Optional, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
isPresent(), ifPresent(), orElse(), orElseGet(), orElseThrow(), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, ΠΈΠ»ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Optional ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠΎΠΌΡ ΠΈ ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Optional Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ, ΠΈ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.β¨οΈ 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
ΠΠ°ΠΊΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅?
Π£Π½Π°ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ - ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π ΡΠ½Π°ΡΠ½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ: +, -, !
Π ΡΠ°ΠΊ ΠΆΠ΅, ΠΏΡΠ΅-ΡΠ½Π°ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΈ ΠΏΠΎΡΡ-ΡΠ½Π°ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ.
- (ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΌΠ΅Π½Ρ Π·Π½Π°ΠΊΠ°)
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΎ Π²ΡΡ ΡΡΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ - ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΡΡ Π΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, ΡΡΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄ΠΎ int, Π² ΡΠ»ΡΡΠ°Π΅ Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ byte, short ΠΈΠ»ΠΈ char.
! - ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ½Π²Π΅ΡΡΠΈΠΈ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΡΠΈΠΏΠ° boolean ΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· true Π² false ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° (++) ΠΈ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° (--) ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡΡ Π΄Π²ΡΠΌΡ Π²Π°ΡΠΈΠ°ΡΠΈΡΠΌ:
ΠΏΠΎΡΡ-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ/Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ (i++ ΠΈ i--)
ΠΏΡΠ΅-ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½Ρ/Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ (++i ΠΈ --i)
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π°ΡΠΈΠ°ΡΠΈΡΠΌΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ ++i ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° i++ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°ΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅ΠΌ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
Π§ΡΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ½Π°ΡΠ½ΡΠΉ + ? ΠΠ° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΊΠ°ΠΊ ΠΈ ΡΠ½Π°ΡΠ½ΡΠΉ -.
Varargs (Variable Arguments List, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠΉΡΡ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²) β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (ΠΎΡ Π½ΡΠ»Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅). ΠΠ°Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² JDK 5.
ΠΠ°ΠΏΠΈΡΡ Π²ΠΈΠ΄Π°
Object... args ΠΈ Π΅ΡΡΡ varargs.
ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠΈ ΡΠΎΡΠΊΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΏΠ° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΠ², ΡΠ°ΠΊ ΠΈ Π»ΡΠ±ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ
ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² - Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Π½Π΅ΡΠ²Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. Π£ΠΆΠ΅ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ varargs ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ².
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ varargs ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π² ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Varargs Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ Ρ ΡΠ΅Π»ΡΡ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°.
π Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ varargs ΡΠΎΠ»ΡΠΊΠΎ Π² Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ.π ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ 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.
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π° Π²Ρ
ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ boolean Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ.
Π£ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ° Π΅ΡΡΡ 3 default ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΌΠ΅Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π³ΠΎΠ²ΠΎΡΡΡΠΈΠ΅: and(), or(), negate()π ΠΠ°ΠΏΠΈΡΡ (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 β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΡΠΈΠ·Π²Π°Π½Π½ΡΠΉ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΡΠ±ΠΎΡΠΌΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Java.
Sentry ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Ρ Π²Π°ΡΠΈΠΌΠΈ Java-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ
Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅ΠΊΠ°, ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ± ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π±ΡΡΡΡΠΎ Π²ΡΡΠ²Π»ΡΡΡ ΠΈ ΡΡΡΡΠ°Π½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠ²ΡΡΠ°Ρ ΠΎΠ±ΡΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ, Sentry ΡΠΎΠ±Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π° ΡΠ΅ ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ:
} catch (Exception e) {
Sentry.addBreadcrumb("readFile");
Sentry.captureException(e);
}
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ sentry-spring-boot-starter ΠΈ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅ sentry.dsn