Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ?
Anonymous Quiz
6%
current version: 0.1a
67%
current version: 0.5b
5%
current version: 0.1a current version: 0.5b
21%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π21
ΠΠ°ΠΊΠΈΠ΅ Π±ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΠΊΠΎΠΉ Π² Java?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π§ΠΈΡΠ»Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π² Java Ρ ΡΠ°Π½ΡΡΡΡ Π² Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ. ΠΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠ°Π΄Π°Π΅Ρ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΠΊΡΡΠ³Ρ β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ, Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (underflow/overflow).
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠΈΠΌΠ°, ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ *Exact ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ Math. ΠΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠΎΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ»Π°ΡΡΠΎΡΠΌΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ JVM ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ½ΠΎ. ΠΡΠ΅Π΄Π΅Π»Ρ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡ ΡΡΡΠΎΠ³ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π½Π° Π»ΡΠ±ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ strictfp Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ IEEE 754. ΠΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡ ΡΠ΄ΡΠΈΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ArithmeticException.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° Π½ΠΎΠ»Ρ. ΠΡΠΎ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠΎΡΠ°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ· Math.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ β ΠΏΠΎΠΊΡΡΡΡ ΠΊΠΎΠ΄ Unit-ΡΠ΅ΡΡΠ°ΠΌΠΈ.
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π§ΠΈΡΠ»Π° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π² Java Ρ ΡΠ°Π½ΡΡΡΡ Π² Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ. ΠΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠ°Π΄Π°Π΅Ρ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ ΠΏΠΎ ΠΊΡΡΠ³Ρ β ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ, Π»ΠΈΠ±ΠΎ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ. Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ (underflow/overflow).
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠΈΠΌΠ°, ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ *Exact ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ Math. ΠΡΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠΎΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ»Π°ΡΡΠΎΡΠΌΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΠΊΡΡΠ³Π»Π΅Π½ΠΈΡ.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ JVM ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ½ΠΎ. ΠΡΠ΅Π΄Π΅Π»Ρ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠΎ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡ ΡΡΡΠΎΠ³ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π½Π° Π»ΡΠ±ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ strictfp Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ IEEE 754. ΠΠ° ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡ ΡΠ΄ΡΠΈΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡΡΡ ΡΠΎΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ArithmeticException.
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° Π½ΠΎΠ»Ρ. ΠΡΠΎ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠΎΡΠ°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ· Math.
Π Π΅ΡΠ΅Π½ΠΈΠ΅: Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΠΎΡΠΈΠ±ΠΊΡ. ΠΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ β ΠΏΠΎΠΊΡΡΡΡ ΠΊΠΎΠ΄ Unit-ΡΠ΅ΡΡΠ°ΠΌΠΈ.
π18π₯2β‘1
ΠΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ?
Anonymous Quiz
44%
1 2
2%
2 1
4%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
50%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π30
ΠΡΠ»ΠΈΡΠ°ΡΡΡΡ Π»ΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ?
Java ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ²Π΅ΡΠ° Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄. ΠΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ +=, &=, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ (compound assignment). Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π±ΠΈΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
Π£ ΡΠ°ΠΊΠΈΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠΉ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠ°ΠΌ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ x += y β ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ x = (XType)(x + y). Π’ΠΎ Π΅ΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊ ΡΠΈΠΏΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°.
ΠΠ΅Π·Π½Π°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ΄Π° (ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ).
Java ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡΠ²Π΅ΡΠ° Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄. ΠΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ +=, &=, ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. ΠΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ (compound assignment). Π‘ΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π±ΠΈΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
Π£ ΡΠ°ΠΊΠΈΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠΉ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΡΠ°ΠΌ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ x += y β ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ x = (XType)(x + y). Π’ΠΎ Π΅ΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΊ ΡΠΈΠΏΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°.
ΠΠ΅Π·Π½Π°Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ΄Π° (ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ).
π49π₯8π1
Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π·Π΄Π΅ΡΡ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΡ ΠΌΠ°Ρ. ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ.
Π‘Π°ΠΌΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π» ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ β ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠΎΠ΄ Random.nextInt(1) Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 0 ΠΈ 1.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ "ΠΈΡΠΏΠΎΡΡΠΈΡΡ" ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Random.nextInt(2)%2. Π’Π°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0 ΠΈΠ»ΠΈ 1. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ΅ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°, 2, Π±ΡΠ΄Π΅Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΎ Π² 0. ΠΠ½Π°ΡΠΈΡ, ΠΎΡΠ²Π΅Ρ 0 Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π² Π΄Π²Π° ΡΠ°Π·Π° ΡΠ°ΡΠ΅ ΡΠ΅ΠΌ 1.
ΠΡΠΎ ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π»ΡΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΡΠΌ Β«ΡΠΊΠΎΠ»ΡΠ½ΡΠΌΒ» Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° %. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π°Π±ΠΎΡΡ ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ.
ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ, ΡΡΠΎΠΈΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π²ΡΠΎΠ΄Π΅ Apache Commons Math.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΡΠΎ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎ Π²ΠΎΠΏΡΠΎΡΠ΅ ΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π·Π΄Π΅ΡΡ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΡΠ΅ΠΎΡΠΈΡ ΠΌΠ°Ρ. ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ, Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ.
Π‘Π°ΠΌΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π» ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ±ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ β ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π·Π°Π΄Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠΎΠ΄ Random.nextInt(1) Π±ΡΠ΄Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 0 ΠΈ 1.
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ "ΠΈΡΠΏΠΎΡΡΠΈΡΡ" ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ. ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Random.nextInt(2)%2. Π’Π°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 0 ΠΈΠ»ΠΈ 1. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ΅ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°, 2, Π±ΡΠ΄Π΅Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΎ Π² 0. ΠΠ½Π°ΡΠΈΡ, ΠΎΡΠ²Π΅Ρ 0 Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π² Π΄Π²Π° ΡΠ°Π·Π° ΡΠ°ΡΠ΅ ΡΠ΅ΠΌ 1.
ΠΡΠΎ ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π»ΡΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΡΠΌ Β«ΡΠΊΠΎΠ»ΡΠ½ΡΠΌΒ» Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° %. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π°Π±ΠΎΡΡ ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Ρ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ.
ΠΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ, ΡΡΠΎΠΈΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Π²ΡΠΎΠ΄Π΅ Apache Commons Math.
π22π₯3
ΠΠΈΡΠ°Π΅Ρ Π»ΠΈ var ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ?
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ var ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π² Java 10. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ var Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΏΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊ Π½Π΅ΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ² (type inference). Π’ΠΈΠΏ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ.
ΠΡΡΡΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ²ΠΎΠ΄ΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ var Π² ΠΏΠΎΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅ ΠΊΡΠΎΠΌΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ β Π²Π°ΡΠΈΠ°Π½ΡΡ var x; ΠΈΠ»ΠΈ var x = null; Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ.
Π Π³Π»Π°Π²Π½ΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ β ΠΊ ΠΊΠΎΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΡΠ°ΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅. Π ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ²Π΅Ρ: Π½Π΅Ρ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠΈΠΏ β ΡΡΡΠΎΠ³ΠΈΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ.
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΡΠΏΡΡΠ΅Π½ΠΈΠ΅ β Π² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ diamond operator. Π ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ Π² Π½ΡΠΌ Π²ΡΠ²Π΅Π΄Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ generic-ΡΠΈΠΏ, Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ var ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΈ ΡΠΈΠΏΠΎΠΌ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Object.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ var ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π² Java 10. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ var Π²ΠΌΠ΅ΡΡΠΎ ΡΠΈΠΏΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊ Π½Π΅ΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ² (type inference). Π’ΠΈΠΏ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ.
ΠΡΡΡΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ²ΠΎΠ΄ΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ var Π² ΠΏΠΎΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΈ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅ ΠΊΡΠΎΠΌΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΎΠ±ΡΠ·Π°Π½Π° Π±ΡΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ β Π²Π°ΡΠΈΠ°Π½ΡΡ var x; ΠΈΠ»ΠΈ var x = null; Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ.
Π Π³Π»Π°Π²Π½ΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ β ΠΊ ΠΊΠΎΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Ρ ΡΠ°ΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅. Π ΡΡΠΎ ΠΈ Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ.
ΠΡΠ²Π΅Ρ: Π½Π΅Ρ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠΈΠΏ β ΡΡΡΠΎΠ³ΠΈΠΉ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ.
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΡΠΏΡΡΠ΅Π½ΠΈΠ΅ β Π² ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ diamond operator. Π ΠΎΠ±ΡΡΠ½ΡΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ Π² Π½ΡΠΌ Π²ΡΠ²Π΅Π΄Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ generic-ΡΠΈΠΏ, Π½ΠΎ Π² ΡΠ»ΡΡΠ°Π΅ var ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΈ ΡΠΈΠΏΠΎΠΌ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Object.
π₯14π4β€1
ΠΠ°ΠΊ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ generic ΡΠΈΠΏΠ°?
ΠΠ½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° class Foo<T> Π½Π° generic ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ T Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ: Π½Π΅Π»ΡΠ·Ρ Π²Π·ΡΡΡ Π΅Π³ΠΎ .class, Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π² instanceof. Π’Π°ΠΊΠΆΠ΅ ΠΈ Π²ΡΠ·ΠΎΠ² Π½Π° Π½Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΊΡΠΎΠ΅ΡΡΡ Π² ΡΡΠΈΡΠ°Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ². ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΊΠΎΡΠ΅Π΅ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ. ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠ°Ρ -ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ. Π Π²ΡΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π΄Π΅ΡΡ β ΠΊΡΠΎΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° T ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Class<T>. ΠΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ· Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠ΅Π½ΠΎΠΌ.
ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Ρ Π°ΠΊ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ ΡΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ². Π’ΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅. ΠΠ΅ΡΠΎΠ΄ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ getGenericSuperclass() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
ΠΠ½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° class Foo<T> Π½Π° generic ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ T Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ: Π½Π΅Π»ΡΠ·Ρ Π²Π·ΡΡΡ Π΅Π³ΠΎ .class, Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π² instanceof. Π’Π°ΠΊΠΆΠ΅ ΠΈ Π²ΡΠ·ΠΎΠ² Π½Π° Π½Π΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΡΠΈΡΠΈΠ½Π° ΡΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΊΡΠΎΠ΅ΡΡΡ Π² ΡΡΠΈΡΠ°Π½ΠΈΠΈ ΡΠΈΠΏΠΎΠ². ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΊΠΎΡΠ΅Π΅ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ. ΠΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ ΠΆΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠ°Ρ -ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ. Π Π²ΡΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π΄Π΅ΡΡ β ΠΊΡΠΎΠΌΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ° T ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΅ΡΠ΅ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Class<T>. ΠΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΈΠ· Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ»Π΅ΠΊΡΠ΅Π½ΠΎΠΌ.
ΠΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ Ρ Π°ΠΊ, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ ΡΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ². Π’ΠΈΠΏ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅. ΠΠ΅ΡΠΎΠ΄ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ° Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ²ΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ getGenericSuperclass() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ.
π18
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ArrayStoreException?
ΠΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠΏΡΡΠ°Π»Π°ΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π’Π°ΠΊΠ°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·-Π·Π° ΠΊΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
ΠΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΏΠΎ ΡΠΈΠΏΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²:
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ heap pollution Π² ΡΠ»ΡΡΠ°Π΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ². Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ΅ΠΆΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
// ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ½Ρ!
ΠΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΠΏΡΡΠ°Π»Π°ΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π’Π°ΠΊΠ°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·-Π·Π° ΠΊΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ².
ΠΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΏΠΎ ΡΠΈΠΏΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ²:
Object x[] = new String[3];ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π±Π΅ΡΠ΅ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»Π΅ΠΌ ΡΠΈΠΏΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΅Π³ΠΎ Ρ ΡΠ°Π½ΠΈΡ. ΠΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠΏΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈ Π²ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ArrayStoreException.
x[0] = new Integer(0);
Π‘ΠΈΡΡΠ°ΡΠΈΡ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ heap pollution Π² ΡΠ»ΡΡΠ°Π΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ². Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠ΅ΠΆΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ°ΠΏΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
// ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ½Ρ!
List<Object> x = new ArrayList<String>();
π18
ΠΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ upcasting ΡΠΈΠΏΠ°-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°?
ΠΠ°Π΄Π°ΡΠ°: Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ²:
Upcasting β ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΠΏΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ. String β Object, Integer β Number.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π»ΡΠ±ΡΡ Π΄Π²ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΅ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠ΅Π΄ΠΎΠΊ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Object. ΠΡΠ»ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ String ΠΈ Boolean β ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΠΏΠ°-Π³ΡΠ°Π½ΠΈΡΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ T Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΡΡ Π² Object.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ super ΡΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ: Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ.
Π€ΠΎΠΊΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ±ΡΠ΅ΠΊΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΈΠΏΠ°-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ is a). ΠΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΠΠ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΈΡΡ. Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΡΡΡΠ°Π» Π±Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΠΈΡΠΊΠΎΠ².
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ β Ρ ΠΏΠΎΠΌΠΎΡΡΡ getClass() ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
ΠΠ°Π΄Π°ΡΠ°: Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ²:
<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() ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅.
π11β€3β‘1
ΠΠ°ΠΊ Spring Framework ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½ Dependency Injection?
ΠΠ½Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ (inversion of control, IoC) β ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡ. Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π½Π°ΡΡ ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄Π΅ΡΠ°Π»ΡΡ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅ΠΈΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ, ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ²ΡΠ·Π½ΠΎΡΡΡ.
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Dependency Injection, DI) β ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ IoC. ΠΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ DI β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΈΡ Π² IoC-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ, Service Locator, Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌ ΠΈ ΠΈΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Spring β Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. DI ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ β Spring IoC.
Π‘ΡΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Spring, ΠΊΠ°ΠΊ ΠΈ Π² JavaEE Π½Π°Π·ΡΠ²Π°ΡΡΡΡ beans. ΠΠΈΠ½Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΊΠΎΡΠ½ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΠ· Π½ΠΈΡ Π»Π΅ΠΆΠ°Ρ Π² ΠΏΠΎΠ½ΡΡΠΈΠΈ Configuration. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π±ΠΈΠ½ΠΎΠ² Π²ΡΡΡΡΠΏΠ°Π΅Ρ ApplicationContext. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Autowired.
ΠΠ½Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ (inversion of control, IoC) β ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡ. Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΠΈ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π½Π°ΡΡ ΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄Π΅ΡΠ°Π»ΡΡ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅ΡΠ΅ΠΈΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠΌ, ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ²ΡΠ·Π½ΠΎΡΡΡ.
ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Dependency Injection, DI) β ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ IoC. ΠΡΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΌΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠΌ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ DI β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈΡΡΠ΅Ρ Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΈ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΈΡ Π² IoC-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ, Service Locator, Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌ ΠΈ ΠΈΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Spring β Π±ΠΎΠ»ΡΡΠΎΠΉ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. DI ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ β Spring IoC.
Π‘ΡΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Spring, ΠΊΠ°ΠΊ ΠΈ Π² JavaEE Π½Π°Π·ΡΠ²Π°ΡΡΡΡ beans. ΠΠΈΠ½Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΊΠΎΡΠ½ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΈΠ· Π½ΠΈΡ Π»Π΅ΠΆΠ°Ρ Π² ΠΏΠΎΠ½ΡΡΠΈΠΈ Configuration. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π±ΠΈΠ½ΠΎΠ² Π²ΡΡΡΡΠΏΠ°Π΅Ρ ApplicationContext. Π§ΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΎΠ½Π° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠ΅ΠΉ @Autowired.
π18π4π₯΄2β€1
ΠΠ°ΠΊΠΎΠΉ Ρ Spring Π±ΠΈΠ½ΠΎΠ² ΡΠΊΠΎΡΠΏ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ?
Π Spring Framework Π²ΠΎ Π²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (bean) ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡ scope. Π Java-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Scope, Π² xml β Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ scope ΡΠ΅Π³Π° <bean>.
ΠΡΡΠΈΠ±ΡΡ scope β ΡΡΠΎ ΡΡΡΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π²ΠΈΡ Π±ΠΈΠ½Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° org.springframework.beans.factory.config.Scope. Π‘ΠΊΠΎΡΠΏ β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Β«ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΒ» Π΄Π»Ρ ΡΠ°Π±ΡΠΈΠΊ Π±ΠΈΠ½ΠΎΠ², ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ Spring-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΎΠΊΠΎΡΠΏΠ°:
β’ singleton β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ»ΡΡΠ°Π΅Π²: ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π΅Π· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ ΠΊΠ»Π°ΡΡ-ΡΠΈΠ½Π³Π»ΡΠΎΠ½: ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΡΡ Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π΄Π²Π°. ΠΡΠΎ ΡΠΊΠΎΡΠΏ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
β’ prototype β ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΡΠΈΠΊΠ° Π±ΠΈΠ½ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π±ΠΈΠ½ΠΎΠ² Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ.
Spring Web Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ 4 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π±ΠΈΠ½ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° (request), ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ (session), ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ΡΠ²Π»Π΅ΡΠ° (application) ΠΈ Π²Π΅Π±ΡΠΎΠΊΠ΅Ρ-ΡΠ΅ΡΡΠΈΠΈ (websocket).
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΊΠΎΡΠΏΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΌΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ Spring: SimpleThreadScope, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΈΠ½ ΡΡΠ΅Π΄-Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΊΠΎΡΠΏΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² BeanFactory.
Π Spring Framework Π²ΠΎ Π²ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ (bean) ΡΠ²Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡ scope. Π Java-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Scope, Π² xml β Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ scope ΡΠ΅Π³Π° <bean>.
ΠΡΡΠΈΠ±ΡΡ scope β ΡΡΠΎ ΡΡΡΠΎΠΊΠ°-ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π²ΠΈΡ Π±ΠΈΠ½Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° org.springframework.beans.factory.config.Scope. Π‘ΠΊΠΎΡΠΏ β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Β«ΡΡΡΠ°ΡΠ΅Π³ΠΈΡΒ» Π΄Π»Ρ ΡΠ°Π±ΡΠΈΠΊ Π±ΠΈΠ½ΠΎΠ², ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ Spring-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π²Π° ΡΠΎΠΊΠΎΡΠΏΠ°:
β’ singleton β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ. ΠΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΡΠ»ΡΡΠ°Π΅Π²: ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡΡ Π±Π΅Π· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π‘ΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ ΠΊΠ»Π°ΡΡ-ΡΠΈΠ½Π³Π»ΡΠΎΠ½: ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π²ΡΡ Π±ΠΈΠ½ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Π±ΡΠ΄Π΅Ρ Π΄Π²Π°. ΠΡΠΎ ΡΠΊΠΎΡΠΏ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
β’ prototype β ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π±ΡΠΈΠΊΠ° Π±ΠΈΠ½ΠΎΠ² ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π±ΠΈΠ½ΠΎΠ² Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ.
Spring Web Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ 4 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°ΡΡ Π±ΠΈΠ½ ΡΠΈΠ½Π³Π»ΡΠΎΠ½ΠΎΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° (request), ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ΅ΡΡΠΈΠΈ (session), ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ΡΠ²Π»Π΅ΡΠ° (application) ΠΈ Π²Π΅Π±ΡΠΎΠΊΠ΅Ρ-ΡΠ΅ΡΡΠΈΠΈ (websocket).
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΊΠΎΡΠΏΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΌΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ Spring: SimpleThreadScope, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΈΠ½ ΡΡΠ΅Π΄-Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ. ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΊΠΎΡΠΏΡ, Π½ΡΠΆΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² BeanFactory.
π16β€2
Π’ΠΈΠΌΠ»ΠΈΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π² Π³ΠΎΡΠΎΠ΄Π°Ρ Π Π€, Π‘Π΅ΡΠ±ΠΈΠΈ, ΠΠ°Π·Π°Ρ ΡΡΠ°Π½Π°, ΠΡΠΌΠ΅Π½ΠΈΠΈ, ΠΠ΅Π»Π°ΡΡΡΠΈ.
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π―Π½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ², Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡΡ runtime ΠΎΠ±Π»Π°ΠΊΠ°, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ»Π°ΠΉΠ½-Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠΉ, ΡΠ΅ΡΡΡΡΠ½ΠΎΠΉ ΠΈ ΡΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ β ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΡ.
ΠΡΠ΅ΠΌ ΠΎΠΏΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ»ΠΈΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π°Π½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΈΡ .
ΠΠ°Ρ ΡΡΠ΅ΠΊ: Java 11, Spring Boot, Reactor, HTTP ΠΈ gRPC API, Kotlin, PostgreSQL.
ΠΡ ΠΆΠ΄Π΅ΠΌ, ΡΡΠΎ Π²Ρ:
- ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ Π½Π° Java Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ΅Ρ Π»Π΅Ρ;
- ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄;
- ΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ; Π½Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π»ΡΠ΄Π΅ΠΉ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²;
- ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΌΠ»Π°Π΄ΡΠΈΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠΏΡΡΠΎΠΌ;
- Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΡ;
- ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, *nix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΠ‘.
- Π·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Spring Boot, jUnit, Netty, Reactor);
Π£ΡΠ»ΠΎΠ²ΠΈΡ:
- ΡΠΈΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈ;
- Π·Π°ΡΠΏΠ»Π°ΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ½ΠΊΠ° ΠΈ Π²ΡΡΠ΅;
- ΠΏΡΠ΅ΠΌΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Ρ , ΠΊΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ» ΡΠ΅Π²ΡΡ;
- ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΠΠ‘: ΠΎΠΏΠ»Π°ΡΠ° 80% ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΠΠ‘ Π΄Π»Ρ ΡΡΠΏΡΡΠ³ΠΎΠ² ΠΈ Π΄Π΅ΡΠ΅ΠΉ;
- Π³ΠΈΠ±ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΊΠ»ΠΈΠΊΠ½ΡΡΡΡΡ: https://goo.su/hlTfAB ΠΈΠ»ΠΈ Π² Π’Π: @Karm_Anna
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π² Π³ΠΎΡΠΎΠ΄Π°Ρ Π Π€, Π‘Π΅ΡΠ±ΠΈΠΈ, ΠΠ°Π·Π°Ρ ΡΡΠ°Π½Π°, ΠΡΠΌΠ΅Π½ΠΈΠΈ, ΠΠ΅Π»Π°ΡΡΡΠΈ.
ΠΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π―Π½Π΄Π΅ΠΊΡΠ° β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ², Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡΡ runtime ΠΎΠ±Π»Π°ΠΊΠ°, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ»Π°ΠΉΠ½-Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΠΎΠΉ, ΡΠ΅ΡΡΡΡΠ½ΠΎΠΉ ΠΈ ΡΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ β ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ . ΠΠ°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Π²ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΡ.
ΠΡΠ΅ΠΌ ΠΎΠΏΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ»ΠΈΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Π½Π°Π½ΠΈΠΌΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ² ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΈΡ .
ΠΠ°Ρ ΡΡΠ΅ΠΊ: Java 11, Spring Boot, Reactor, HTTP ΠΈ gRPC API, Kotlin, PostgreSQL.
ΠΡ ΠΆΠ΄Π΅ΠΌ, ΡΡΠΎ Π²Ρ:
- ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈ Π½Π° Java Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠ΅Ρ Π»Π΅Ρ;
- ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄;
- ΡΠΏΡΠ°Π²Π»ΡΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ; Π½Π°Π½ΠΈΠΌΠ°Π»ΠΈ Π»ΡΠ΄Π΅ΠΉ ΠΈ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²;
- ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΌΠ»Π°Π΄ΡΠΈΡ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π΅Π»ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠΏΡΡΠΎΠΌ;
- Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡΡ;
- ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅ ΠΈΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, *nix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΠ‘.
- Π·Π½Π°Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ (Spring Boot, jUnit, Netty, Reactor);
Π£ΡΠ»ΠΎΠ²ΠΈΡ:
- ΡΠΈΠ»ΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈ;
- Π·Π°ΡΠΏΠ»Π°ΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ½ΠΊΠ° ΠΈ Π²ΡΡΠ΅;
- ΠΏΡΠ΅ΠΌΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΠΏΠΎΠ»Π³ΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Ρ , ΠΊΡΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ» ΡΠ΅Π²ΡΡ;
- ΡΠ°ΡΡΠΈΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΠΠ‘: ΠΎΠΏΠ»Π°ΡΠ° 80% ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΠΠ‘ Π΄Π»Ρ ΡΡΠΏΡΡΠ³ΠΎΠ² ΠΈ Π΄Π΅ΡΠ΅ΠΉ;
- Π³ΠΈΠ±ΠΊΠΈΠΉ Π³ΡΠ°ΡΠΈΠΊ ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΊΠ»ΠΈΠΊΠ½ΡΡΡΡΡ: https://goo.su/hlTfAB ΠΈΠ»ΠΈ Π² Π’Π: @Karm_Anna
yandex.ru
ΠΠ°ΠΊΠ°Π½ΡΠΈΡ Β«Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java Π±Π°Π·ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²Β» Π² Π―Π½Π΄Π΅ΠΊΡΠ΅ β ΡΠ°Π±ΠΎΡΠ° Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π―Π½Π΄Π΅ΠΊΡ Π΄Π»Ρ ITβ¦
Π Π°Π±ΠΎΡΠ° Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π―Π½Π΄Π΅ΠΊΡ Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ° Β«Π ΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Java Π±Π°Π·ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ²Β» Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΎΡ Β«Π‘ΡΠ°ΡΡΠΈΠΉΒ» Π΄ΠΎ Β«Π‘ΡΠ°ΡΡΠΈΠΉΒ» β ΠΡΡΠΎΠΊΠ°Ρ Π·Π°ΡΠ°Π±ΠΎΡΠ½Π°Ρ ΠΏΠ»Π°ΡΠ° ΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π² IT-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π ΠΎΡΡΠΈΠΈ
π4β€1
ΠΠ°ΠΊΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ @β Component, @β Service, @β Repository ΠΈ @β Controller?
@Component β ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Spring-Π±ΠΈΠ½Π°. ΠΠ· Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°Π΅Ρ @ComponentScan), Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π±ΠΈΠ½-Π΄Π΅ΡΠΈΠ½ΠΈΡΠ½Ρ.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ β ΡΡΠΎ Π°Π»ΠΈΠ°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΄ΡΠ° Spring Framework ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅.
ΠΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ Β«Stereotype annotationsΒ». ΠΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΠ»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
β’ @β Service β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β’ @β Repository β Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ : Β«ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ DAO;
β’ @β Controller β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π±-Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΠΌΠ΅ΡΠΎΠ΄Ρ @RequestMapping)
Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Persistence API ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠ° @Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
@Component β ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Spring-Π±ΠΈΠ½Π°. ΠΠ· Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°Π΅Ρ @ComponentScan), Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Π±ΠΈΠ½-Π΄Π΅ΡΠΈΠ½ΠΈΡΠ½Ρ.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ β ΡΡΠΎ Π°Π»ΠΈΠ°ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ @Component. Π‘Π°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ΄ΡΠ° Spring Framework ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅.
ΠΡΠΈ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ Β«Stereotype annotationsΒ». ΠΡ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ β ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°, Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΠ»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
β’ @β Service β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ;
β’ @β Repository β Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π°Π½Π½ΡΡ : Β«ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉΒ» ΠΈΠ· Domain-Driven Design ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ DAO;
β’ @β Controller β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π±-Π·Π°ΠΏΡΠΎΡΠΎΠ² (ΠΌΠ΅ΡΠΎΠ΄Ρ @RequestMapping)
Π‘ΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Persistence API ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠ° @Repository. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
π21
ΠΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΠ°Π΅Ρ Spring Data?
ΠΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ: ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , map-reduce ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ. Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° (Domain-driven design, DDD).
Spring Data ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² ΠΆΠΈΠ·Π½ΠΈ. ΠΠΎΡ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
β’ Spring Data JPA β Π°Π΄Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Java Persistence API, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Hibernate.
β’ Spring Data JDBC β Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΌ JPA Π°Π΄Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ JDBC-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ².
β’ Spring Data REST β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ hypermedia-driven RESTful ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
β’ Spring Data KeyValue β ΡΠ°Π±ΠΎΡΠ° Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
β’ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ: MongoDB, Redis, Cassandra, LDAP, ΠΈ Π΄ΡΡΠ³ΠΈΡ .
ΠΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ: ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈ Π½Π΅ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , map-reduce ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΠ½ΡΠΌΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ. Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° β ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π° (Domain-driven design, DDD).
Spring Data ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² ΠΆΠΈΠ·Π½ΠΈ. ΠΠΎΡ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
β’ Spring Data JPA β Π°Π΄Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Java Persistence API, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Hibernate.
β’ Spring Data JDBC β Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΌ JPA Π°Π΄Π°ΠΏΡΠ΅Ρ Π΄Π»Ρ JDBC-Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ².
β’ Spring Data REST β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ hypermedia-driven RESTful ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
β’ Spring Data KeyValue β ΡΠ°Π±ΠΎΡΠ° Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
β’ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡ: MongoDB, Redis, Cassandra, LDAP, ΠΈ Π΄ΡΡΠ³ΠΈΡ .
π27
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Spring Data
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² Spring Data ΡΡΡΠΎΠΈΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Repository. ΠΡΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅ ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΡΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ: ΡΠ°ΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
CrudRepository β Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).
PagingAndSortingRepository β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
JpaRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ Java Persistence API. ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ flush ΠΈ deleteInBatch.
MongoRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ Π΄Π»Ρ MongoDB.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ Π² Spring Data ΡΡΡΠΎΠΈΡΡΡ Π²ΠΎΠΊΡΡΠ³ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Repository. ΠΡΠΎ ΠΌΠ°ΡΠΊΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡ Π½Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΡΠ΅ ΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΡΡΡΡΡ Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ: ΡΠ°ΠΌΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΈ Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°.
CrudRepository β Π±Π°Π·ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π½Π°Π΄ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΡΡΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ (CRUD).
PagingAndSortingRepository β Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΊ CRUD Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ.
JpaRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅Π΅ Java Persistence API. ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΡΠ΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ flush ΠΈ deleteInBatch.
MongoRepository β ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ PagingAndSortingRepository, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ Π΄Π»Ρ MongoDB.
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΈ. ΠΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΈΠΌΠ΅Π½Π°Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
π10π₯6β€1
Π§ΡΠΎ Π»ΡΡΡΠ΅, ArrayList ΠΈΠ»ΠΈ LinkedList?
Π‘Π°ΠΌΡΠΉ ΠΈΠ·Π±ΠΈΡΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΈΡΠΊΠΈ ArrayList, ΠΊΠΈΡΠΊΠΈ LinkedList) ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΡΠΈΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ . Π Π²ΠΎΠΏΡΠΎΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Vector β ΠΏΠ΅ΡΠ΅ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ArrayList, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Collections.synchronizedList().
ArrayList Ρ ΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, LinkedList Π² Π΄Π²ΡΡΠ²ΡΠ·Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅. ΠΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°Π·Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: ArrayList Π»ΡΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΈ ΡΠΎΡΡΠΎΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ capacity, LinkedList β Π½Π° ΠΊΡΠ°ΡΡ . Π ΡΠ΅Π»ΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ArrayList Π»ΡΡΡΠ΅.
Π‘ΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΊΡΠ°ΡΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Deque: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ ArrayDeque.
Π‘Π°ΠΌΡΠΉ ΠΈΠ·Π±ΠΈΡΡΠΉ Π²ΠΎΠΏΡΠΎΡ. ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΈΡΠΊΠΈ ArrayList, ΠΊΠΈΡΠΊΠΈ LinkedList) ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΡΡΠΈΡ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ . Π Π²ΠΎΠΏΡΠΎΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Vector β ΠΏΠ΅ΡΠ΅ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ArrayList, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Collections.synchronizedList().
ArrayList Ρ ΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, LinkedList Π² Π΄Π²ΡΡΠ²ΡΠ·Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅. ΠΠ· ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ°Π·Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: ArrayList Π»ΡΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΈ ΡΠΎΡΡΠΎΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ capacity, LinkedList β Π½Π° ΠΊΡΠ°ΡΡ . Π ΡΠ΅Π»ΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ArrayList Π»ΡΡΡΠ΅.
Π‘ΡΠΎΠΈΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π° ΠΊΡΠ°ΡΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Deque: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΡΡ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ ArrayDeque.
π34π€£3π₯2
ΠΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
31%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅ 12
13%
ΠΡΠΈΠ±ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΠ΅ 13
20%
ΠΠΎΠ΄ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ
36%
ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
π13β€1