Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π²Π°ΠΉΠ»Π΄ΠΊΠ°ΡΠ΄Ρ 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 ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ, Π²Ρ ΡΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΅ΠΉ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.
ΠΠ²ΡΠΎΡ: ΠΡΠ°ΠΉΠ΅Π½ ΠΠ΅ΡΡ (brian.goetz@sun.com)
Π³Π»Π°Π²Π½ΡΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, Sun Microsystems
ΠΠ΅ΡΠ΅Π²ΠΎΠ΄: Π. ΠΡΠ΅Π»ΡΡΠΊΠ°Ρ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: http://www.ibm.com/developerworks
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ: 28.04.2009
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ wildcard capture
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π°ΡΠΏΠ΅ΠΊΡΠΎΠ² generic-ΡΠΈΠΏΠΎΠ² (ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ²) Π² ΡΠ·ΡΠΊΠ΅ Java ΡΠ²Π»ΡΡΡΡΡ wildcards (ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Β«?Β»), ΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ β ΡΠΎΠ»ΠΊΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ°Π·Π±ΠΎΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ ΠΏΡΠΈ wildcard capture (ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΡΠΈΠΏΠ° Π²ΠΌΠ΅ΡΡΠΎ wildcard). Π Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΡΡΠΈ Β«Π’Π΅ΠΎΡΠΈΡ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° JavaΒ» (Java theory and practice) ΡΡΠ°ΡΠ΅ΠΉΡΠΈΠΉ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΡΠ°ΠΉΠ΅Π½ ΠΠ΅ΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΡΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π°Π³Π°Π΄ΠΎΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Β«javacΒ», ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ generic-ΡΠΈΠΏΠΎΠ².
ΠΠΈΡΠΊΡΡΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ generic-ΡΠΈΠΏΠΎΠ² Π½Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Ρ ΡΠ΅Ρ ΡΠ°ΠΌΡΡ ΠΏΠΎΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΡΠ·ΡΠΊ Java Π² JDK 5. ΠΠ΄Π½ΠΈ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΠΈΠΏΡ ΡΠΏΡΠΎΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π° ΡΡΠ΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ² ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠΈΠΏΠΎΠ². ΠΡΡΠ³ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ generic-ΡΠΈΠΏΠΎΠ² ΡΠΎΠ»ΡΠΊΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΡΠ°Π½ΠΈΡΡ. ΠΡΠ΅ ΠΌΡ ΠΏΡΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π·Π°ΡΡΠ°Π²Π»ΡΡΡΠΈΠΌΠΈ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ wildcards ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠ°ΠΌΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°ΡΡΡ generic-ΡΠΈΠΏΠΎΠ².
ΠΡΠ½ΠΎΠ²Ρ ΡΠ°Π±ΠΎΡΡ Ρ wildcards
Generic-ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: Β«ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ ΠΈΠ· ΡΠΈΠΏΠΎΠ² Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² x ΠΈΠ»ΠΈ y, ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°Β», Β«Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²Β», ΠΈΠ»ΠΈ Β«Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ foo() ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, ΡΡΠΎ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ bar()Β».
Wildcards β ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΠΊΠΈ, ΠΎΡΠΌΠ΅ΡΠ°ΡΡΠΈΠ΅ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°. ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΈΠΏΠ°. ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΈ Π·Π½Π°ΠΊΠΈ Π½Π΅ ΡΠ²Π»ΡΠ»ΠΈΡΡ ΡΠ°ΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ generic-ΠΎΠ², ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Generic Java (GJ), Π° Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π·Π° ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΏΡΡΡ Π»Π΅Ρ, ΡΡΠΎ ΠΏΡΠΎΡΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ JSR 14 ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π²ΡΠΏΡΡΠΊΠΎΠΌ.
Wildcards ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΈΠΏΠΎΠ². ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°Π΄Π°ΡΡ Π³ΡΠ°Π½ΠΈΡΡ Π΄Π»Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΡΠΈΠΏΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ generic-ΠΊΠ»Π°ΡΡΠΎΠΌ. ΠΠ»Ρ generic-ΠΊΠ»Π°ΡΡΠ° ArrayList ΡΠΈΠΏ ArrayList ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΏΠ΅Ρ-ΡΠΈΠΏΠΎΠΌ ArrayList Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° T (ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΈΠΏ (raw type) ArrayList ΠΈ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΡΠΈΠΏ (root type) Object, Π½ΠΎ ΡΡΠΈ ΡΡΠΏΠ΅ΡΡΠΈΠΏΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±Π½Ρ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠ°).
Π£ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ wildcard. Π§ΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ?
ΠΠΈΡΡΠΈΠ½Π³ 1 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Box, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ put ΠΈ get. Box ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ T, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΌ ΡΠΈΠΏ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Box ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠ° String.
ΠΠΈΡΡΠΈΠ½Π³ 1. ΠΡΠΎΡΡΠΎΠΉ generic-ΡΠΈΠΏ Box
ΠΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² wildcards ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ generic-ΡΠΈΠΏΠΎΠ² Π±Π΅Π· Π·Π½Π°Π½ΠΈΡ ΠΈΡ ΡΠΎΡΠ½ΡΡ Π³ΡΠ°Π½ΠΈΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΈΠΏΠ° Box β ΡΠ°ΠΊΠ°Ρ, ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ box Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ unbox() Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2. Π§ΡΠΎ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ unbox(), ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ box?
ΠΠΈΡΡΠΈΠ½Π³ 2. ΠΠ΅ΡΠΎΠ΄ Unbox Ρ wildcard-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ
Π§ΡΠΎ Π·Π½Π°Π΅Ρ unbox() ΠΎ ΡΠΈΠΏΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π° box.get()? ΠΠ½ Π·Π½Π°Π΅Ρ, ΡΡΠΎ ΡΡΠΎ ΡΠΈΠΏ T Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ T. ΠΠΎΡΡΠΎΠΌΡ Π»ΡΡΡΠ΅Π΅, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ β ΠΏΡΠΈΠ½ΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡ get() ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ ΡΠΈΠΏΠ° T. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ wildcard ΡΡΠΎΡ ΡΠΈΠΏ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠΈΠΏΠΎΠΌ Object. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ box.get() Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2 Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Object.
Wildcard capture
ΠΠΈΡΡΠΈΠ½Π³ 3 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡ ΠΎΠΆ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±Π΅ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ generic-ΡΠΈΠΏΠ° Box, ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠΎΡ ΠΆΠ΅ Box.
ΠΠΈΡΡΠΈΠ½Π³ 3. ΠΠ·ΡΡΠΎΠ΅ ΠΈΠ· box Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ
Capture helpers
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π·Π΄Π΅ΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π°ΡΡ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌΡ wildcard-ΡΠΈΠΏΡ ΠΈΠΌΡ. Π ΠΠΈΡΡΠΈΠ½Π³Π΅ 4 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ rebox(), Π²ΠΊΠ»ΡΡΠ°ΡΡΠ°Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ generic-ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎ ΠΈ Π΄Π΅Π»Π°Π΅Ρ:
ΠΠΈΡΡΠΈΠ½Π³ 4. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ Π΅Π»ΠΏΠ΅ΡΠ°
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ reboxHelper() ΡΠ²Π»ΡΠ΅ΡΡΡ generic-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ. Generic-ΠΌΠ΅ΡΠΎΠ΄Ρ Π²Π²ΠΎΠ΄ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠ² (ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Π² ΡΠ³Π»ΠΎΠ²ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ/ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ reboxHelper() generic-ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠ°, Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ β ΡΠ΅ΡΠ΅Π· Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ° β Π΄Π°ΡΡ ΠΈΠΌΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ box.
ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΈ rebox() ΠΊΠ°ΠΊ generic-ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ reboxHelper(), Π½ΠΎ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ API ΡΡΠΎ Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΎΡΠΈΠΌ ΡΡΠΈΠ»Π΅ΠΌ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π΄Π΅ΡΡ β Π½Π΅ Π΄Π°Π²Π°ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π΅ΡΠ»ΠΈ Π½Π° ΡΡΠΎ ΠΈΠΌΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»ΠΎΠΊ. Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ generic-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΈΠ³Π½Π°ΡΡΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΠΎ ΠΎΠ½, ΡΠΊΠΎΡΠ΅Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ wildcard, Π½Π΅ΠΆΠ΅Π»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΡΠΈΠΏΠ°. ΠΠΎΠΎΠ±ΡΠ΅ ΠΆΠ΅, API Ρ wildcards ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ API Ρ generic-ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ; ΡΠ°Π·ΡΠ°ΡΡΠ°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠΈΠΏΠΎΠ² Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅Π³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ private capture-Ρ Π΅Π»ΠΏΠ΅ΡΠ°, Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π°Π΅Ρ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΡ ΡΠ°Π½ΡΡΡ API ΡΠΈΡΡΡΠΌΠΈ, Π½Π΅ ΡΠ΄Π°Π»ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½ΡΠΆΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠ°
ΠΡΠΈΠ΅ΠΌ Ρ capture-Ρ Π΅Π»ΠΏΠ΅ΡΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΈΠΏΠΎΠ² (type inference) ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ (capture conversion). Java-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ² Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ , ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ° Π² generic-ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΎΠ½ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ (Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π²ΡΠ²ΠΎΠ΄ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ² Π² Java). ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΈΠΏΠ°, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΡΠΈΠΏ β Π° capture-ΡΠΈΠΏΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈΠ΅ΠΌ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΈΠΏ ΡΠ°ΠΌ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π°Π³Π»ΡΡΠΊΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠΈΠΏΠ° Π΄Π»Ρ wildcard ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΈΠΏΠΎΠ² Π±ΡΠ» Π²ΡΠ²Π΅Π΄Π΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΡΠΈΠΏ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΡΡΠ°ΡΠ°ΡΡΡΡ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΡΠΈΠΏ Π΄Π»Ρ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ° ΠΏΡΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° generic-ΠΌΠ΅ΡΠΎΠ΄Π°. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ generic-ΠΌΠ΅ΡΠΎΠ΄Π°:
ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠ³ Π±Ρ ΡΠ΅ΡΠΈΡΡ, ΡΡΠΎ T ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ Integer, Number, Serializable ΠΈΠ»ΠΈ Object, Π½ΠΎ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Integer, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ.
Π’Π°ΠΊΠΎΠ΅ Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Β«ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° DRYΒ» (Don’t Repeat Yourself β Β«ΠΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠΉΡΡ!Β») ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° IDE Π³ΠΎΡΠΎΠ²Ρ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ Π·Π° Π²Π°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ° BoxImpl ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ generic-ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΠΈΡΡΠΈΠ½Π³Π΅ 5 (ΡΡΠΎ, Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ΄Π΅Ρ), Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΡ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅:
ΠΠΈΡΡΠΈΠ½Π³ 5. Generic-ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΠΈΠΏΠ°.
ΠΡΠ»ΠΈ Box ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±ΡΠΈΠΊΠΈ BoxImpl.make(), ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·:
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π½Π°ΠΆΠ°ΡΠΈΠΉ Π½Π° ΠΊΠ»Π°Π²ΠΈΡΠΈ, ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π·Π΄Π΅ΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ²: ΡΠ°Π±ΡΠΈΠΊΠ°ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Π²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°, ΡΠ°Π±ΡΠΈΠΊΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΈΠΏΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². (Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°Π±ΡΠΈΠΊ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΡΠ°ΡΡΠ΅ Β«Effective Java, Item #1Β», ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» Β«Π Π΅ΡΡΡΡΡΒ»).
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ, wildcards ΠΌΠΎΠ³ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ. ΠΠ΄Π½ΠΈ ΠΈΠ· ΡΠ°ΠΌΡΡ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Java, ΡΠ²ΡΠ·Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠ°Π· Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ wildcards. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Java ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Ρ wildcards. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ wildcards ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½Ρ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π΄Π²Π° ΠΏΡΠΈΠ΅ΠΌΠ° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ capture-Ρ Π΅Π»ΠΏΠ΅ΡΠΎΠ² ΠΈ generic-ΡΠ°Π±ΡΠΈΠΊ, ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ generic-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΈΠΏΠΎΠ². ΠΡΠΈ Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΡΡΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ.
Π Π΅ΡΡΡΡΡ
Copyright Β© 1994-2016 ΠΠΠ «Π-ΠΡΠ΅ΡΡ»
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ (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 ΠΠΎΠ»ΠΎΡΠΎΠ²Π°ΡΡ
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎ PECS
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ PECS. ΠΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π³ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠ΅Π½ΡΠΎΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ°Π· Π²ΠΏΠ΅ΡΠ°ΡΠ°Π»ΠΈ Π»Π°Π΄ΠΎΠ½Ρ Π² Π»ΠΈΡΠΎ, ΠΈΠ±ΠΎ Β«Java Generics ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π² JDK 1.5, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΠ»Π° 30 ΡΠ΅Π½ΡΡΠ±ΡΡ 2004 Π³ΠΎΠ΄Π°β¦Β». ΠΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ΅, Π΄Π»Ρ ΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ PECS ΠΎΡΡΠ°ΡΡΡΡ ΡΡΠΌΠ°Π½Π½ΡΠΌ ΠΈ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, Π° ΡΠΏΠΎΡΠ½ΠΎΠ΅ Π³ΡΠ³Π»Π΅Π½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ³ΡΡΠ°Π΅Ρ Β«ΡΡΠΌΠ°Π½Β», Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°Ρ, Π±ΡΠ΄Π΅ΠΌ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π΄ΡΡ ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΈΡ. Π₯ΠΎΡΡ ΡΡΠ°Π·Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΡ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠ΅ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ wildcard. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ½ΡΡΠΈΡΠΌΠΈ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ PECS Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡ. ΠΡΠ΅, ΠΊΡΠΎ Π²ΡΡΡΠ΅ΡΠ°Π»ΡΡ Ρ Π½ΠΈΠΌ, Π·Π½Π°ΡΡ, ΡΡΠΎ ΡΡΠΎ Π°ΠΊΡΠΎΠ½ΠΈΠΌ, ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ Β«Producer Extends Consumer SuperΒ». ΠΠ°ΠΊ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΡΠ°ΡΡΡΡ , Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ Π½Π΅ΠΊΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ wildcard Ρ Π²Π΅ΡΡ Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ (extends) β ΡΠΎ ΡΡΠΎ, Β«ΠΏΡΠΎΠ΄ΡΡΠ΅ΡΒ». Β«ΠΠ½ ΡΠΎΠ»ΡΠΊΠΎ Β«ΠΏΡΠΎΠ΄ΡΡΠΈΡΡΠ΅ΡΒ», ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π° ΡΠ°ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΒ». ΠΡΠ»ΠΈ ΠΆΠ΅ Ρ Π½Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ wildcard ΠΏΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ (super) β ΡΠΎ ΡΡΠΎ, Β«ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΒ», ΠΊΠΎΡΠΎΡΡΠΉ Β«ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ, Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΒ».
ΠΡ, Π²ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ ΠΈ Π²ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΎΠ²Π»Π°Π΄Π΅Π»ΠΈ Β«ΡΡΠΌΠ½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠ΅ΠΉΒ» PECS ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΌΠ΅Π»ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΡΠ³Π», ΡΡΠΎΠ±Ρ ΡΡΠ°Π·ΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡΠ΅ΡΠΎΠ² ΡΠ²ΠΎΠ΅ΠΉ ΠΏΡΠ΅ΠΌΡΠ΄ΡΠΎΡΡΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠΏΡΡΠ½ΠΎΡΡΡΡ. ΠΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΡΡΡ, Π·Π°ΠΏΡΡΡΠΈΡΡ Π»ΡΠ±ΠΈΠΌΡΡ IDE ΠΈ Π΄Π»Ρ Π³Π°Π»ΠΎΡΠΊΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΡ ΡΠ°ΠΊ ΠΈ Π΅ΡΡΡ: ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ Π²Π΅ΡΡ Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅, ΠΌΠΎΠ³ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΏΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅, ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΌΠΈ.
ΠΠ»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π½Π°ΡΠΈΠ½Π°ΡΡΠ°ΡΡΡ Ρ Class0, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ Π΄Π»Ρ Class1, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ Π΄Π»Ρ Class2, ΠΈ Ρ.Π΄. Π Π΅ΡΡΡ Π½Π΅ΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ wildcard Ρ Π²Π΅ΡΡ Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ PECS, ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² Π΄Π°Π½Π½ΡΠΉ Π»ΠΈΡΡ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠΈΠΊΠΎΠΌ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΡΡΠΎΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½: ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² list, ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ Class3, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠ· list ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Class4, Class5, Class6 ΠΈ Ρ.Π΄. ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠ²Π΅ΡΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ, ΡΠΎ Ρ ΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²Π°Ρ ΠΏΠ»ΠΎΡ Π°Ρ Π½ΠΎΠ²ΠΎΡΡΡ β Β«ΠΎΡΠΊΠΎ ΡΡ ΠΎΠ΄ΠΈΡ ΡΠ΅Π»Π΅Π·ΡΠΈΡΠ΅Π»ΡΠΌΒ»! Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ:
ΠΠ°ΡΠΎ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ:
ΠΡΡΡΠ΄Π° Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π²ΡΠ²ΠΎΠ΄: ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ? Π Π°Π·Π²Π΅ Π·Π΄Π΅ΡΡ Π½Π΅Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ? ΠΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΠΎΡΠΎΠΌΠΊΠΈ Π΄Π»Ρ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π° ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈΠΌΠ΅ΡΡΠΈΠ΅ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°-ΠΏΡΠ΅Π΄ΠΊΠ°. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π·Π΄Π΅ΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡΡ Π² Π»ΠΈΡΡΠ΅. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Class3. Π’ΠΎΠ³Π΄Π° Π² ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠ΅
ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ°-ΠΏΡΠ΅Π΄ΠΊΠ° ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΈΠΌΠ΅ΡΡΡΡ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΡΠ΅Π³ΠΎ Java ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠ²Π½ΠΎ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π΅ΡΠ»ΠΈ ΠΌΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, ΡΡΠΎ ΡΠΎΡΠ½ΠΎ Π·Π½Π°Π΅ΠΌ, ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄ΡΡ Π»Π΅ΠΆΠ°ΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π»ΠΈΡΡΠ΅, ΡΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΌΠΎΠΆΠ΅ΠΌ Ρ Π½ΠΈΠΌ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ.
Π‘ ΡΡΠΈΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ. ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π² Π΄Π°Π½Π½ΡΠΉ Π»ΠΈΡΡ? ΠΠ°ΠΊΠ°Ρ ΡΠ΅Π»ΠΈΠ³ΠΈΡ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ Π½Π°ΠΌ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ?
Π ΡΡΡ ΠΌΡ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° PECS β Β«consumer superΒ» (Β«wildcard Ρ super β ΡΡΠΎ consumer, ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ, Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΒ»).
ΠΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
Π ΡΡΡ Π²ΡΡΠ°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ PECS: ΠΏΠΎΡΠ΅ΠΌΡ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ wildecard Ρ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΠ΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Object?
ΠΡΠ»ΠΈ Π²Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ Π²ΡΡ, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅, ΡΠΎ ΡΠΆΠ΅, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π΄ΠΎΠ³Π°Π΄ΡΠ²Π°Π΅ΡΠ΅ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠΌ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅Ρ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ wildcard Π±ΡΠ΄Π΅Ρ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΡΠΎΡΡΠΎΡΡΠ°Ρ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²-ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ-ΠΏΡΠ΅Π΄ΠΊΠΈ.
ΠΡΠ»ΠΈ Π±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΡΠ» Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Β«Π»Π΅Π³Π°Π»ΡΠ½ΡΠΌΒ» (Π²Π΅Π΄Ρ Class2 ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΏΠ΅ΡΠΊΠ»Π°ΡΡΠΎΠΌ Π΄Π»Ρ Class3)
ΡΠΎ ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ List ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ List (ΠΎΠ±Π° ΠΎΠ½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΠΌΠ°ΡΠΊΠ΅ ) Π° ΠΎΠ±ΡΠ΅ΠΊΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ (Class2 obj) Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΊΠ° ( list.get(0) ). ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠΎΠ³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ β ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ· ΡΠ°ΠΊΠΎΠ³ΠΎ Π»ΠΈΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΡΠΈΠΏ, ΠΎΠ±ΡΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Java, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Object.
ΠΠΎΡ ΠΈ Π²ΡΡ, ΡΡΠΎ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ PECS. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΠΎΡ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ Π²ΡΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°ΠΆΠ΄ΡΡΠΈΠΌ ΠΈΡΡΠΈΠ½Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅.


