Wildcard java ΡΡΠΎ ΡΡΠΎ
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ (Java, ΠΎΠ±ΡΡΠ°ΡΡΠ°Ρ ΡΡΠ°ΡΡΡ)
ΠΡΠ΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅
ΠΠ° ΠΎΡΠ½ΠΎΠ²Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π±ΡΠ»Π° Π²Π·ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· 6-ΠΎΠΉ Π³Π»Π°Π²Ρ ΠΊΠ½ΠΈΠ³ΠΈ Β«Oracle Certified Professional Java SE 7 Programmers Exams 1Z0-804 and 1Z0-805Β». ΠΠ½Π° Π±ΡΠ»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° (ΠΊΠΎΠ΅-Π³Π΄Π΅ ΠΎΠ±ΡΠ΅Π·Π°Π½Π°, Π° ΠΊΠΎΠ΅-Π³Π΄Π΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Google ΠΈ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ). ΠΠ΄Π΅ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ Π½ΡΠ°Π½ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² β Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΡΠΈΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ. Π Java, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ J2SE 5.0, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° C++. ΠΠΈΠΆΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ generics (Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ) ΠΈΠ»ΠΈ > β ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠΏΡΡΡΠΈΠΌ ΠΌΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°Ρ ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΈΠ³ΡΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ).
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
Π Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±ΡΠ»Π° Π΄ΠΎΠΏΡΡΠ΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Π’Π΅ΠΏΠ΅ΡΡ Π½Π° Π²ΡΠ΅ΠΌΡ Π·Π°Π±ΡΠ΄Π΅ΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² (ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌ ΡΡ ΠΆΠ΅ ΠΎΡΠΈΠ±ΠΊΡ):
Π‘Π°ΠΌΠΎΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ (Π΄Π»Ρ ΠΌΠ΅Π½Ρ) Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ:
ΠΡΠΌΠ°Ρ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΡΡΡΡ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Β«Π»ΡΡΡΠ΅Β» ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Ρ.ΠΊ. ΡΠΈΡΡΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°ΡΡΡ ΡΡΠ΄Π°, ΠΊΡΠ΄Π° Π΅ΠΌΡ Π»ΡΡΡΠ΅ Π±Ρ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ. ΠΡΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΡΡ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠΎΠΊΡ
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ BoxPrinter:
ΠΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ » » ΡΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠΌΡ ΡΠΈΠΏΠ° «Π’», ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π’ β ΡΡΠΎ ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ ΠΏΠΎΠ·ΠΆΠ΅ (ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ°).
ΠΠ½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ T Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ»Ρ:
ΠΠ΄Π΅ΡΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏΠ° (generic type), Ρ.ΠΎ. Π΅Ρ ΡΠΈΠΏ Π±ΡΠ΄Π΅Ρ ΡΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° BoxPrinter.
Π main()-ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅:
ΠΠ΄Π΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π’ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Integer. ΠΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° value1 Π²ΡΠ΅ ΠΏΠΎΠ»Ρ Π’-ΡΠΈΠΏΠ° Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ° BoxPrinter ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΏΠΎΠ»ΡΠΌΠΈ ΡΠΈΠΏΠ° Integer (private Integer val;).
ΠΡΡ ΠΎΠ΄Π½ΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ T:
ΠΠ°ΠΊ ΠΈ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ val Ρ ΡΠΈΠΏΠΎΠΌ Π’, Π²Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° BoxPrinter ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ T. ΠΠΎΠ·ΠΆΠ΅ Π² main()-ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π² new, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π’ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Integer:
Π’Π΅ΠΏΠ΅ΡΡ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° BoxPrinter, arg ΠΈ val Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ T. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°:
ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π’ Π² ΠΊΠ»Π°ΡΡΠ΅ β ΠΌΠ΅ΡΠΎΠ΄ getValue():
Π’ΡΡ Π²ΡΠΎΠ΄Π΅ ΡΠΎΠΆΠ΅ Π²ΡΡ ΡΡΠ½ΠΎ β ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π½ ΠΏΡΠΈ Π΅Π³ΠΎ (ΠΎΠ±ΡΠ΅ΠΊΡΠ°) ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΡ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ ΠΎΠ΄Π½ΠΈΠΌ Π»ΠΈΡΡ ΡΠΈΠΏΠΎΠΌ (Π’) β ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ:
ΠΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΈ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ:
ΠΠ»ΠΌΠ°Π·Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ (Diamond syntax)
ΠΠ΅ΡΠ½ΡΠΌΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π°Π΄ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°:
ΠΡΠ»ΠΈ ΡΠΈΠΏΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ:
Π’ΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π½ΠΈΠ²ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΡΠΈΠΏΡ ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΈΠ±ΠΈΡΡΡΡ. Π§ΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌ Π² Java 7 Π±ΡΠ» Π²Π²Π΅Π΄ΡΠ½ Π°Π»ΠΌΠ°Π·Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ (diamond syntax), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ°. Π’.Π΅. ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠΈΠ΄ ΡΠΏΡΠΎΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ «<>» ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π»ΠΌΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°
Π ΡΠ»ΡΡΠ°Π΅ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΊΠΎΠ΄Π° Π²ΡΡΠ΅ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Pair ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏΠΎΠΌ ΠΈ Π±ΡΠ»ΠΈ Π·Π°Π±ΡΡΡ «<>» ΠΈΠ»ΠΈ ΡΠ²Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (raw type) Ρ Pair ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΌ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π₯ΠΎΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΠ΄Π΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π²ΠΎΡ ΡΡΠΎΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°:
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π²ΠΎΡ ΡΡΠΎΡ:
ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠ±Π° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ, Π½ΠΎ Ρ Π½ΠΈΡ ΡΠ°Π·Π½Π°Ρ ΠΈΠ΄Π΅Ρ. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΠΌΠ΅ΡΡΠΎ Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΈΠΏΠΎΠΌ, Π²ΠΎ Π²ΡΠΎΡΡΠΌ β Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ»ΠΎΠΌΠ°Π΅ΠΌ ΡΡΠΎ Π΄Π΅Π»ΠΎ β Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ
ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (java.lang.ClassCastException), Π° Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ β ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π ΠΎΠ±ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° 2 ΡΠ°ΠΌΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΡΠ»ΠΈ Π² Π΄Π²ΡΡ ΡΠ»ΠΎΠ²Π°Ρ , ΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΎΡΡΡΡ ΡΠΈΠΏΠΎΠ², Π²Ρ ΡΠ΅ΡΡΠ΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ², ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌΠΈ.
Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ (Generic methods)
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ (Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ), ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ (Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΌΠ΅ΡΠΎΠ΄Ρ), ΡΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠΈΠΏΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡΡΠ°ΡΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π² Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΠΊΠ»Π°ΡΡΠ΅. Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΄ΠΎΠ±Π½Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΈΠΏΠ°ΠΌ. (ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΠΊΠ»Π°ΡΡΠ΅ java.util.Collections.)
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°:
ΠΠ°ΠΌ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΡΡΠΎ:
» » ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»ΠΎΠ² «public» ΠΈ «static», Π° Π·Π°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. Π’Π°ΠΊΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΠΎΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π³Π΄Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°. Π’Π΅Π»ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ β Π² ΡΠΈΠΊΠ»Π΅ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (val). ΠΡ ΠΈ Π² main()-ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΠ·ΠΎΠ² Π½Π°ΡΠ΅Π³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°:
Π‘ΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅ Π·Π°Π΄Π°Π½ ΡΠ²Π½ΠΎ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΠ»Ρ IntList β ΡΡΠΎ Integer ΠΈ 100 ΡΠΎΠΆΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π² Integer. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠ°Π²ΠΈΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΠΈΠΏΡ Π’ β Integer.
Π ΡΠ΅ΠΉΡΠ°Ρ Π²ΠΎΠΏΡΠΎΡ β ΠΊΠ°ΠΊΠ°Ρ (-ΠΈΠ΅) ΠΈΠ· Π½ΠΈΠΆΠ΅ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΡ ΡΡΡΠΎΠΊ ΠΎΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ?
ΠΡΠ²Π΅Ρ Ρ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ΠΌ:
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ, Ρ.ΠΊ. Π½Π΅Π»ΡΠ·Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ArrayList ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π΄Π»Ρ ArrayList ΠΊΠ»Π°ΡΡΠ°. Π ΡΠ°ΠΌ, ΠΈ ΡΠ°ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ β Π²ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Π ΡΡΠ΅ΡΡΠ΅ΠΌ ΠΈ ΡΠ΅ΡΠ²ΡΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Ρ.ΠΊ. Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ (ΡΠ²ΡΠ·ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π·Π΄Π΅ΡΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ).
Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΡΡΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 3. ΠΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ ΡΡΠΎ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ?
ΠΡΠ΄Π΅ΠΌ Π΄ΡΠΌΠ°ΡΡ ΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ β Π΄ΠΎΠΏΡΡΡΠΈΠΌ 3-ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
Wildcards (ΠΠ°ΡΠΊΠΈ)
Π‘Π΅ΠΉΡΠ°Ρ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Wildcard Parameters (wildcards). ΠΡΠΎΡ ΡΠ΅ΡΠΌΠΈΠ½ Π² ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ: ΠΌΠ΅ΡΠ°ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π³ΡΡΠΏΠΏΠΎΠ²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΡΠ°Π±Π»ΠΎΠ½Ρ, ΠΌΠ°ΡΠΊΠΈ ΠΈ Ρ.Π΄. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ Π±ΡΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ «ΠΌΠ°ΡΠΊΡ», ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π² Π½Π΅ΠΉ ΠΌΠ΅Π½ΡΡΠ΅ Π±ΡΠΊΠ²β¦
ΠΠ°ΠΊ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅ Π²ΠΎΡ ΡΠ°ΠΊΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ:
ΠΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
ΠΠΎΠ΄ ΠΌΠ°ΡΠΊΠΎΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π²ΠΎΡ ΡΡΡ ΡΡΡΠΊΡ β » «.
Π ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΌΠ°ΡΠΊΡ ΠΈ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
ΠΠ΅ΡΠΎΠ΄ printList ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° ΠΌΠ°ΡΠΊΠ°:
Π ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠΎΠ² Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ (Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Integer ΠΈ String).
ΠΠ΄Π½Π°ΠΊΠΎ Π²ΠΎΡ ΡΡΠΎ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ:
Π Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
Π’ΡΡ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅Ρ ΠΎΡΠΎΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ numList Ρ ΡΠ°Π½ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΊ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Ρ ΡΠ°Π½ΠΈΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠΈ ΡΠΈΡΠ΅Π». Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π΅ΡΡΡ:
ΠΠ°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, Π° Π²ΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ°ΡΠΊΠΈ ΠΌΡ Π·Π°Π΄Π°Π»ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ numList ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΡΠ»ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ Number, Π° Π²ΡΡ ΠΈΠ·-Π·Π° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ: List numList. Π’ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΊΠ΅ Π·Π°Π΄Π°ΡΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ β ΡΠ΅ΠΏΠ΅ΡΡ numList ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΈΠΏΠΎΠ². Double ΠΊΠ°ΠΊ ΠΈ Integer Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΡ Number, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ.
Π’ΠΎ, ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΠΌΠ°ΡΠΊΠ°ΠΌΠΈ (Bounded wildcards). ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²Π΅ΡΡΠΌΠ° ΠΊΡΠ°ΡΠΈΠ²ΡΠΌ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ. ΠΠΎΠΏΡΡΡΠΈΠΌ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΡΡΠΌΠΌΡ ΡΠΈΡΠ΅Π» ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅:
Double-ΡΠΈΠΏ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ result Ρ.ΠΊ. ΠΎΠ½ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ (Ρ.Π΅. Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ²).
ΠΠ° ΡΡΠΎΠΌ Π²ΡΠ΅. ΠΠ°Π΄Π΅ΡΡΡ, Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ Π±ΡΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.
ΠΡΠ»ΠΈ ΠΠ°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»Π°ΡΡ ΡΡΠ°ΡΡΡ, ΠΏΡΠΎΠ³ΠΎΠ»ΠΎΡΡΠΉΡΠ΅ Π·Π° Π½Π΅Π΅
ΠΠΎΠ»ΠΎΡΠΎΠ²: 175 ΠΠΎΠ»ΠΎΡΠΎΠ²Π°ΡΡ
ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ , generic
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Java 5 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠ½Π΅ΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°Π·Π²Π°Π½Π½Π°Ρ Π² Java generic. ΠΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌΠΈ ΠΈ ΠΏΡΠΎΡΠ΅ Π² ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
generic ΡΠ²Π»ΡΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΠ΅ΠΉ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ «Π¨Π°Π±Π»ΠΎΠ½ΠΎΠ²»(template) Π² Π‘++. ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ, ΡΡΠΎ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Java Π±ΡΠ΄ΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Ρ C++. ΠΠ° Π΄Π΅Π»Π΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΠ°Π·Π»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ generic’Π°ΠΌΠΈ Java ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ Π‘++ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π²Π΅Π»ΠΈΠΊΠΈ. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ generic Π² Java ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΠΈΡ C++-Π°Π½Π°Π»ΠΎΠ³, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² C++ ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΡΠ΄ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠ»ΠΈΡΠΈΠΉ. Π’Π°ΠΊ, Π² ΡΠ·ΡΠΊΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ, ΠΊΠ°ΡΠ°ΡΡΠΈΡ ΡΡ generic’ΠΎΠ² β ΡΡΠΎ ΠΌΠ°ΡΠΊΠΈ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ 2 ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ generic. ΠΡΠΈΠΌΠ΅Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ generic Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° (java casting):
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π·Π½Π°Π΅Ρ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΡΠΉ Π² List’e. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° («java casting»). ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ next() Π²Π΅ΡΠ½ΡΡ Object, Π½ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° Integer ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ java casting. ΠΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ «Runtime Error» ΠΈΠ·-Π·Π° Π½Π΅Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: «ΠΠ°ΠΊ Ρ ΡΡΠΈΠΌ Π±ΠΎΡΠΎΡΡΡΡ? ΠΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°ΡΡ List Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ ?». ΠΠ°Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ generic. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ generic Π±Π΅Π· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ².
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊ Integer, Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠΏ ΡΠΏΠΈΡΠΊΠ° List. Π ΡΡΠΎΠΌ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅, ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΏ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅. ΠΡΡΠ΅ΠΊΡ ΠΎΡ generic ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ : ΠΎΠ½ ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π»ΠΎΠΌ.
Π‘Π²ΠΎΠΉΡΡΠ²Π° Generics
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ generic-ΠΊΠ»Π°ΡΡΠ°
ΠΠ±ΡΡΠ²ΠΈΡΡ generic-ΠΊΠ»Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ :
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ generic-ΠΊΠ»Π°ΡΡΠ° GenericSample :
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ generic
1. Wildcard
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ dump, ΠΊΠΎΡΠΎΡΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Collection Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Collection Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠ΅ΠΉ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ, Π³ΡΡΠ±ΠΎ Π³ΠΎΠ²ΠΎΡΡ Collection ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Wildcard («?»), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ, ΠΈ Π² ΡΡΠΎΠΌ Π΅Π³ΠΎ ΠΏΠ»ΡΡΡ. Π ΡΠ΅ΠΏΠ΅ΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠΎ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ.
2. Bounded Wildcard
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ draw, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³ΡΡΡ, Π½Π°ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Shape. ΠΠΎΠΏΡΡΡΠΈΠΌ Ρ Shape Π΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ Circle, ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ «ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ».
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ Cycle ΠΈ Π²ΡΠ΅Ρ Π΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠΎΠ² Π²ΠΏΠΎΠ»ΠΎΡΡ Π΄ΠΎ Object.
3. Generic ΠΌΠ΅ΡΠΎΠ΄
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ addAll, ΠΊΠΎΡΠΎΡΠ°Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ² Π΄Π°Π½Π½ΡΡ Object[] ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Collection
ΠΡΠΈΠ±ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΡΡΡΠΎΠΊΠ°Ρ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ Object Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π‘ΠΏΠΎΡΠΎΠ± ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ «generic ΠΌΠ΅ΡΠΎΠ΄Π°«. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ.
ΠΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° Π² ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΡΡΠΎΡΠΊΠ΅ :
ΠΠΎΠΏΡΡΡΠΈΠΌ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊ ΡΠΎΡΠΊΠ΅ Glyph ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. Glyph β ΡΡΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡΡΡ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ, Ρ ΡΠ°Π½ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ². Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠ³Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π» Π±Ρ Ρ ΡΠΈΠΏΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, Π° Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΡΡ ΠΊ Glyph. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄Π°ΡΠ½ΡΠΉ:
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ Π»ΠΈΡΠ΅Π½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ². ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠΎ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΠΎΠΆΠ΄Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠ΄Π΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ Π²ΡΡΠ°Π΅Ρ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°, ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Glyph. generic ΡΠ΄Π΅Π»Π°Π» ΡΠ²ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ.
4. Generic-ΠΊΠ»Π°ΡΡΡ
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² generic-ΠΊΠ»Π°ΡΡΠΎΠ²:
ΠΠ°ΠΊ Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ , ΡΠ°ΠΊ ΠΈ Π² ΠΊΠ»Π°ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ generic-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°:
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ generic-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Glyph, Π½ΠΎ ΠΈ MoveableGlyph. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΏ, Π½Π΅Ρ. ΠΠΎ Π² ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½, Ρ.ΠΊ. Π² Java Π½Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. Π’ΠΈΠΏΡ Π² ΡΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ generic-ΡΠΈΠΏΠ°ΠΌΠΈ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π°, Π΄Π°ΠΆΠ΅ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ:
5. Bounded type argument
ΠΠ΅ΡΠΎΠ΄ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π² Π΄ΡΡΠ³ΡΡ
6. Lower bounded wildcard
ΠΠ΅ΡΠΎΠ΄ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
6. Wildcard Capture
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Swap Π² List
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ generic
ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² generic’ΠΎΠ² :
ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² generic-ΠΊΠ»Π°ΡΡΠΎΠ² :
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²
Π Generics ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, Ρ ΡΠ°Π½ΡΡΠΈΠΉΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² generic’Π°Ρ
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ generic-ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π² throws ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ, Π·Π°Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π² catch-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ.
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ, ΡΡΠΎ ΡΠΈΠΏ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠΌ Throwable.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, generic-ΠΈ Π² Java ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ ΠΈ Π²Π½Π΅ΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠΊΠΈ (wildcard) ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΡΠ΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎ, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠ΅ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ°, ΡΡΠΈ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΡ Π·Π°ΡΡΡΠ΄Π½ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ generic-ΠΎΠ² ΡΠ΄Π΅Π»Π°Π»ΠΎ ΡΠ·ΡΠΊ Java Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈ ΡΡΡΠΎΠ³ΠΈΠΌ; ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΏΠΎΠ»ΡΠ·Ρ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ generic wildcards Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Java API
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ!
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ API
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ΠΊΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, Π΄Π²ΡΠΌΡ ΡΠΈΠΏΠ°ΠΌΠΈ: ΡΠΈΠΏ ΠΊΠ»ΡΡΠ° ( K ) ΠΈ ΡΠΈΠΏ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ( V ). ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅:
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΏΠΎΠ»Π½Π΅ Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΠΎ ΠΈ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΠΌ:
ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ Π²Π°ΡΠ΅Π³ΠΎ API ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡ Ρ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΠΎΠ·ΡΠΌΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΈΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΡ. Π§ΡΠΎ Ρ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΡΠ°ΠΊ? ΠΠ΅ΡΡΠΌ, Π΄Π° ΠΈ ΠΏΠΈΡΠ΅ΠΌ:
Π Π²Π΅Π΄Ρ Π²ΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ! ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΡ ΡΠ»Π΅Π³ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°:
ΠΠ°ΠΏΠΈΡΡ Predicate ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΠΎΡ V ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΡΠΈΠΏΠ° V (Π²ΠΏΠ»ΠΎΡΡ Π΄ΠΎ Object)Β». ΠΠ°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°, Π·Π°ΡΠΎ ΡΡΡΡΠ°Π½ΡΠ΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ°. ΠΠ»ΠΈΠ΅Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ Π΄Π»Ρ Vehicle ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ:
ΠΡ ΠΎΠ±ΠΎΠ±ΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΡΠΌ ΡΡΡΡ Π½ΠΈΠΆΠ΅, ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ.
ΠΠ°ΠΏΠΈΡΡ Map Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Β«ΠΌΠ°ΠΏΠΊΠ° Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° K ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ² K ΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° V ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ΄ΡΠΈΠΏΠΎΠ² VΒ».
ΠΡΠΈΠ½ΡΠΈΠΏ PECS β Producer Extends Consumer Super
ΠΠ°ΡΡΠ°Π»ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠ²Π΅ΡΡΠΈ ΠΎΠ±ΡΠΈΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΠΈΡ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Joshua Bloch Π½Π°Π·ΡΠ²Π°Π΅Ρ PECS (Producer Extends Consumer Super), Π° Π°Π²ΡΠΎΡΡ ΠΊΠ½ΠΈΠ³ΠΈ Java Generics and Collections (Maurice Naftalin, Philip Wadler) β Get and Put Principle. ΠΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π½Π° PECS, Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎΡΠ΅. ΠΡΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π³Π»Π°ΡΠΈΡ:
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΊΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅? ΠΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, Π° Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ. ΠΠ°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° T.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Predicate β ΡΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (ΠΌΠ΅ΡΠΎΠ΄ getAll(Predicate ) ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° T), Π° Map β ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΌΠ΅ΡΠΎΠ΄ putAll(Map ) ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΏΠ° T β Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ΄ T ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ K ΠΈ V β ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°).
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ, ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΈ ΠΏΠΈΡΠ΅Ρ Π² Π½Π΅Ρ (ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΡΠΈΠ»Ρ, Π½ΠΎ Π²ΡΡΠΊΠΎΠ΅ Π±ΡΠ²Π°Π΅Ρ) β ΡΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ Π΅ΡΡΡ.
Π‘ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΎΠΆΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ β Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ wildcard-ΠΎΠ² Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΠΏΡΠΈΠ½Π΅ΡΡΡ, Π° Π»ΠΈΡΡ Π²ΡΠ½ΡΠ΄ΠΈΡ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ wildcard-Ρ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠΎΠΎΡΡΠΆΠΈΠ²ΡΠΈΡΡ PECS-ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠΉΡΠΈΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ Π½Π°ΡΠ΅Π³ΠΎ MyObjectStore ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΠ°ΠΌ, Π³Π΄Π΅ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ. ΠΠ΅ΡΠΎΠ΄Ρ put(K, V) ΠΈ get(K) ΡΠ»ΡΡΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΡΡ (Ρ.ΠΊ. ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ); ΠΌΠ΅ΡΠΎΠ΄Ρ putAll(Map ) ΠΈ getAll(Predicate ) ΠΌΡ ΡΠΆΠ΅ ΠΈ ΡΠ°ΠΊ ΡΠ»ΡΡΡΠΈΠ»ΠΈ, Π΄Π°Π»ΡΡΠ΅ Π½Π΅ΠΊΡΠ΄Π°; Π° Π²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ getAll(Collection ) ΠΈΠΌΠ΅Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΈΠΏΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠΈΡΡ. ΠΠΌΠ΅ΡΡΠΎ
ΠΈ ΡΠ°Π΄ΡΠ΅ΠΌΡΡ Π½ΠΎΠ²ΠΎΠΌΡ, Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠΌΡ API! (ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΡ Π½Π΅ ΡΡΠΎΠ³Π°Π΅ΠΌ!)
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. Π‘Π°ΠΌΡΠΉ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ β ΡΡΠΎ ΡΠ°Π±ΡΠΈΠΊΠ°:
Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΡΠ²Π»ΡΡΡΠ΅Π³ΠΎΡΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΌ, ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ, Π±ΡΠ΄Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ°:
ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΌ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΠΎ ouput-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ (Ρ ΠΎΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΡΠΈΠ»Ρ Π² Java ΡΠ΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΈΠΌ ΡΠΎΠ½ΠΎΠΌ).
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠΌ PECS (Producer Extends Consumer Super) ΠΈ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ API Π½Π° Java. ΠΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΠΌΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΠΎΡΠ°Ρ ΠΎΠ± ΡΡΠΎΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π΅ Π·Π½Π°ΡΡ, ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΡΡΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ API. ΠΠΎ, ΠΊ ΡΡΠ°ΡΡΡΡ, ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ, Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ² ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΡ PECS ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, Π²Ρ ΡΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅ΠΉ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.
β ΠΡ, ΠΈ Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠ°Ρ Π»Π΅ΠΊΡΠΈΡ ΠΏΠΎ Generic.
Π‘Π΅ΠΉΡΠ°Ρ Ρ ΡΠ΅Π±Π΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ Β«ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ²Β» (Type erasure).
β ΠΠ³Π°. ΠΠ½Π΅ ΡΠΎΠΆΠ΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΡ.
β ΠΠ°ΠΊ ΡΡ ΡΠΆΠ΅ Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅ Π·Π½Π°Π΅ΡΡ, Π² Java Π΅ΡΡΡ ΡΠΈΠΏ Class, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΈΠΌΠ΅ΡΡ:
ΠΠΎ Π²ΠΎΡ ΡΠ΅Π³ΠΎ ΡΡ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π½Π΅ Π·Π½Π°Π΅ΡΡ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΡΡΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»Π°ΡΡ Class, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ GenericβΠΎΠΌ. Π ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠΎΠ³ΠΎ Generic ClassβΠ° ΠΌΠΎΠ³ΡΡ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» ΡΠΈΠΏΠΎΠΌ-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. ΠΡΠΈΠΌΠ΅ΡΡ:
β Π ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΎ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
ΠΠΎ Π΄Π°Π²Π°ΠΉ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π΄Π°Π»ΡΡΠ΅.
Π’Π°ΠΊ Π²ΠΎΡ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΎΠΌ, ΡΡΠΎ Class β ΡΡΠΎ Generic, ΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π΅Π³ΠΎ ΡΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠ° T, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊΡΡ Ρ ΠΈΡΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ:
β ΠΠ³Π°. ΠΠΎΠ½ΠΈΠΌΠ°Ρ. ΠΠΈΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΡ ΡΠ΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΆΠ΅. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΠΈΠΏ Π΅ΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π»Π°Π΄Π½ΠΎ.
β ΠΠΎΡ, ΡΠ»ΡΡΡ ΡΠ»ΠΎΠ²Π° Β«Π½Π΅ ΠΌΠ°Π»ΡΡΠΈΠΊΠ°, Π½ΠΎ ΠΌΡΠΆΠ°!Β» Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΈ Π»Π°Π΄Π½ΠΎ β ΡΡΠΎ ΡΠ°ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»Π°ΡΡ Π² Java, Π½ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΡΠΎ ΡΡΠ°ΡΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΌΠ΅Π½Π½ΠΎ Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΎΡΠ»Π°ΠΆΠ΅Π½Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ β ΡΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΡΠ°ΠΌΡΠΉ Π²Π΅ΡΠΎΠΌΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ»ΡΠ·Ρ Java. Π’Π°ΠΊ ΡΡΠΎ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ, Java ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π½Π΅Π΄ΡΡΡΡ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ΡΡΠ²Π°.
β Π Ρ ΡΠ΄Π΅Π»Π°Ρ ΡΠ²ΠΎΡ Java Ρ Π±Π»Π΅ΠΊΠ΄ΠΆΠ΅ΠΊΠΎΠΌ ΠΈ β¦
β ΠΠ°Π΄Π½ΠΎ, Ρ ΡΠΆΠ΅ ΠΏΠΎΠ΄ΡΡΡΠ°Π» Π·Π° Π΄Π΅Π½Ρ. ΠΠ°Π²Π°ΠΉ Π΄ΠΎ ΡΠ²ΠΈΠ΄Π°Π½ΠΈΡ.
β ΠΠΎ ΡΠ²ΠΈΠ΄Π°Π½ΠΈΡ, Π ΠΈΡΠ°, ΠΈ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΡΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΎΠΊ.
ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Wildcards Π² Java: ΠΎΡ ΠΏΡΠΎΡΡΡΡ Generic ΡΠΈΠΏΠΎΠ² Π΄ΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²
ΠΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Wildcards ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π°ΡΠ°ΡΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Ρ senior ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². ΠΠΊΡΠΏΠ΅ΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ, ΡΡΠ΅Π½Π΅Ρ Luxoft Training ΠΠ΅Π½ΠΈΡ Π¦ΡΠ³Π°Π½ΠΎΠ² ΡΠ°ΡΡΠΊΠ°Π·Π°Π», Π² ΡΠ΅ΠΌ ΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Wildcards ΠΈ Generic Π² Java.
Π ΡΠ΅ΠΌ ΡΡΡΡ
ΠΠΎΡΠ»Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Collection API Π² Π±Π»ΠΈΠ·ΠΊΠΎΠΌ ΠΊ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌΡ Π²ΠΈΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Sun Microsystems (Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΈ Oracle) ΠΈΡΠΊΠ°Π»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΈΠΏΠ°ΠΌ (typesafe) ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΉ Β«Π·Π°Π³ΡΡΠ·Π½Π΅Π½ΠΈΡ ΠΊΡΡΠΈΒ» (heap pollution). Π’Π°ΠΊ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Generic (ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ), ΡΠ΄Π΅Π»Π°Π²ΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΡΠΈΠΏΠΎΠ² Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Β«Π»ΠΎΠ²ΠΈΠ»ΠΈΒ» ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΠΈΡΠΎΠ³Π΅, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³Π»ΠΈ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΏΡΡΡΡ Π³ΠΎΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Java Π²Π½Π΅Π΄ΡΡΠ»ΠΈ Generics Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎ Π·Π°ΡΡΠ°Π²ΠΈΠ»ΠΎ Oracle ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ. ΠΡΠ» Π²ΡΠ±ΡΠ°Π½ ΡΠ°ΠΊΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β«Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ²Β», ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π° ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² (type erasure). Π’ΠΎ Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ (ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ type erasure) Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π±Π΅Π· Generics. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π½Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ, generic ΡΠΈΠΏΡ β ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ½Ρ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ generic ΡΠΈΠΏΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ ΠΎΡ ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ.
Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
ArrayList list = new ArrayList ();
ΠΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠ°ΡΡΠΎ Ρ ΠΎΡΠ΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ generic ΡΠΈΠΏ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΌ generic ΡΠΈΠΏΠ°ΠΌ. ΠΠΆΠΈΠ΄Π°Ρ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ βΠΎΡ Π²Π°ΡΠΈΡβ ΡΡΠΈ ΡΠΈΠΏΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
void doSomethingWithList(List list)
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΌΠΎΠ³ Π±Ρ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ Π»ΡΠ±ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² Numbers, ΡΠΈΠΏΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ Π±Π΅Π· Wildcards. Π ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². Π‘Π»Π΅Π΄ΡΡ ΡΡΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
void doSomethingWithList(List list)
void doSomethingWithList(List list)
void doSomethingWithList(List list)
Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΡΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ². Π’.ΠΊ. ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ:
void doSomethingWithList(List list)
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π½ΠΎ ΠΈΡ ΡΠ΅Π»ΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ (ΠΈΠ»ΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅), Π° ΡΡΠΎ Π½Π°ΡΡΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ β DRY (Donβt Repeat Yourself).
ΠΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Wildcards. Π‘ΠΈΠΌΠ²ΠΎΠ» Β«?Β» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π²ΠΌΠ΅ΡΡΠΎ Generic ΡΠΈΠΏΠ°, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π³ΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΡΠΈΠΏΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ, Π΄Π΅Π»Π°Ρ api ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΈ ΠΈΠ·ΡΡΠ½ΡΠΌ. Wildcards ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠΈΠΏ Π²Π½ΠΈΠ· (extends) ΠΈΠ»ΠΈ Π²Π²Π΅ΡΡ (super).
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Wildcard ΡΠΈΠΏ ΠΌΠΎ ΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ»ΠΊΠ°, Π½ΠΎ Π½Π΅ ΡΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠΈΠΏΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ new :
new ArrayList (); // Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ
ΠΡΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ c Wildcards:
ΠΠ΅ΡΠ²Π°Ρ ΠΈ Π²ΡΠΎΡΠ°Ρ ΡΡΡΠ»ΠΊΠΈ β ΠΊΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½Ρ. Π’ΡΠ΅ΡΡΡ β ΠΊΠΎΠ½ΡΡΠ°Π²Π°ΡΠΈΠ°Π½ΡΠ½Π°.
Π§ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ?
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 1: ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊ Generic ΡΠΈΠΏΡ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
List list = new ArrayList ();
ΠΠ»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΡΠΊΠ°ΡΡ generic ΡΠΈΠΏ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°:
List list = new ArrayList<>();
ΠΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² Π²Π΅ΡΡΠΈΠΈ 1.7 ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Diamonds (ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π±ΡΠΈΠ»Π»ΠΈΠ°Π½Ρ).
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ 2: ΠΠ°ΡΡΠΈΠ²Ρ Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ generics ΠΊΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½Ρ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΅ΡΠ»ΠΈ ΠΠ±ΡΠ΅ΠΊΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ ΠΈ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ (ΠΌΠ°ΡΡΠΈΠ²Ρ), Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ. Π’.Π΅. ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½:
Object[] array = new Integer[5];
ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΡΡΡ Generic ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ. ΠΠΈΡ Π±Π΅Π· Β«Π³Π΅Π½Π΅ΡΠΈΠΊΠΎΠ²Β» Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
// Π‘ΠΏΠΈΡΠΎΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠΏΡ
//ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ raw type List
List listOfStrings = new ArrayList();
//Π Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°
ΠΠ»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ (Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Cast).
String string = (String) listOfStrings.get(0);
//Π΅ΡΡΡ ΡΠ°Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ClassCastException, Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠ³Π°Π΄Π°Π»ΠΈ Ρ ΡΠΈΠΏΠΎΠΌ
String secondString = (String) listOfStrings.get(1);
ΠΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΡΠ²ΠΈΡΡΡ Π² ΡΡΠ΅Π΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Runtime) ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° (Π΅ΡΠ»ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ Π²Π΅ΡΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°ΡΡΠΎ, Π²Π΅Π»ΠΈΠΊ ΡΠ°Π½Ρ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ).
Π‘ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Β«Π³Π΅Π½Π΅ΡΠΈΠΊΠΎΠ²Β» ΠΊΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΈΠ½Π°ΡΠ΅. ΠΡΠΈΠ±ΠΊΠΈ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π½ΡΡΠ΅ β Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π° ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΈΠΆΠ΅. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΈΠΏ, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΡ (ΡΠΈΡΠ°ΠΉ β ΠΈΡΠΊΠ°ΡΡ ΠΏΠΎ ΠΊΠΎΠ΄Ρ) ΡΠΎΡΠ½ΡΠΉ ΡΠΈΠΏ β ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ IDE ΠΈΠ»ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
Π‘ΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° β String Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅.
List trueListOfStrings = new ArrayList<>();
//it accepts String parameter only
Π ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠ³ΠΎ ΡΠΈΠΏΠ° β ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
String alwaysCorrectType = trueListOfStrings.get(0);
//ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ClassCastException ΠΏΡΠΎΠΏΠ°Π΄Π°Π΅Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Cast ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°Π΄Π°ΡΡ ΠΎΡΠ±ΠΎΡΠ° ΠΆΠΈΠ²ΠΎΡΠ½ΡΡ ΠΈΠ· ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΡ (conditional copy). Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΆΠ΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Wildcards.
ΠΠ°ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π½Π°ΡΠ΅ΠΌΡ API:
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠΈΠΏΡ ΠΆΠΈΠ²ΠΎΡΠ½ΡΡ :
boolean result = false;
//ΠΈΠΌΠΈΡΠ°ΡΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ
class Cat extends Animal <
//ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π»ΠΎΠ³ΠΈΠΊΡ isNeeded() Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Cat
ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
List objects = new ArrayList<>();
List cats = new ArrayList<>();
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΅ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ Β«Π² Π»ΠΎΠ±Β»:
void conditionalCopy(List dst, List src) <
/* ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ° Animal, Ρ.ΠΊ. ΡΠΈΠΏ T Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ */
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ 3.
void conditionalCopy(List dst, List src) <
List list = src.stream()
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ΅ΡΠ΅Π½Π°, ΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ:
conditionalCopy(animals, cats); //1
conditionalCopy(animals, animals); //2
conditionalCopy(objects, cats); //3
Π‘ΡΡΠΎΠΊΠΈ 1 ΠΈ 3 Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. ΠΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Β«Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈΒ» ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ 4 Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΡΠ°ΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
void conditionalCopy(List dst, List src) <
List list = src.stream()
conditionalCopy(animals, cats); //1
conditionalCopy(animals, animals); //2
conditionalCopy(objects, cats); //3
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°Π²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΡΡΡ:
void conditionalCopy(List dst, List src) <
List list = src.stream()
ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΡΡ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π²ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΡΠ°ΡΠΈ, Π½Π°Ρ API Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΎΠ΄Π΅ ΡΠ°ΠΊΠΈΡ :
conditionalCopy(cats, animals); //4
conditionalCopy(cats, objects); //5
ΠΠ±Π΅ ΡΡΡΠΎΠΊΠΈ (4) ΠΈ (5) Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΊΠ°ΠΆΡΡΡΡΡΡ ΠΏΡΠΎΡΡΠΎΡΡ Wildcards ΡΡΠ°Π»ΠΈ ΠΊΠ°ΠΌΠ½Π΅ΠΌ ΠΏΡΠ΅ΡΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Π° Β«?Β» Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΡΠΌΡΡΠ»Π΅ Π·Π°ΠΏΡΡΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ Π³ΠΎΡΠΎΠ² ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠΈΠΏΠΎΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊ. Β«ΠΡΠ±ΠΎΠΉΒ» β ΡΡΠΎ Π½Π΅ Β«ΠΊΠ°ΠΆΠ΄ΡΠΉΒ» ΠΈ, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, Π½Π΅ Β«Π²ΡΠ΅ ΡΡΠ°Π·ΡΒ». Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΊΠ°Π·Π°ΡΡ Β«ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ, ΠΈΠ· Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΈΠΏΠΎΠ²Β». ΠΠ»Ρ ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ·Π½Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΡΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ extends ΠΈ super, ΠΏΡΠΈΠ½ΡΠΈΠΏ PECS, raw type, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ heap pollution, ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Generic Π² ΡΠ΅Π»ΠΎΠΌ.