Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

MnogoBlog

ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сайт Π½Π° wordpress, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ wordpress

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π»ΡŽΠ±Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ классов. Π­Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ случаям, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ….
Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ исходники для ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½ΠΈΠΆΠ΅
seo ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ сайтов

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ массива чисСл. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ,
Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот класс для получСния срСднСго значСния чисСл, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ числовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°.
Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ класс, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

ΠœΠ΅Ρ‚ΠΎΠ΄ average() класса Stats пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ‚ΠΈΠΏΠ° double ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа Π² массивС nums, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ doubleValue(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС числовыС классы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Integer ΠΈ Double, ΡΠ²Π»ΡΡŽΡ‚ΡΡ подклассами Number, Π° класс Number опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ doubleValue(), этот ΠΌΠ΅Ρ‚ΠΎΠ΄ доступСн всСм числовым классам-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Stats, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числовыС Ρ‚ΠΈΠΏΡ‹.
Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ класс Stats, выдаСтся сообщСниС ΠΎΠ± ошибкС, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ doubleValue() Π½Π΅ извСстСн. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ способ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Π’ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числовыС Ρ‚ΠΈΠΏΡ‹.
Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ способ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числовыС Ρ‚ΠΈΠΏΡ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этой ситуациСй, язык Java ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Когда указываСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ свСрху, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ супСркласс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ унаслСдованы всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠΎΠ². Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π’ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классом супСркласс Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ подклассами.
Π’ΠΎ Π΅ΡΡ‚ΡŒ супСркласс ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ.
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ свСрху, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ класс Stats,ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅, ΡƒΠΊΠ°Π·Π°Π² класс Number ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ iob Ρ€Π°Π²Π½ΠΎ 3.0
Π‘Ρ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ dob Ρ€Π°Π²Π½ΠΎ 3.3

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ класс Stats Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ объявлСн Ρ‚Π°ΠΊ:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏ Π’ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ классом Number, компилятор Java Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Π’ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ doubleValue(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΌΠ΅Ρ‚ΠΎΠ΄ класса Number. Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ΅ прСимущСство.

Однако Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ бонуса ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π’ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ созданиС нСчисловых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Stats.

НапримСр, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² строках,
находящихся Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ класс String Π½Π΅ являСтся подклассом Number.
Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ использованию Ρ‚ΠΈΠΏΠ° класса ΠΊΠ°ΠΊ ограничСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ интСрфСйса. ЀактичСски Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² качСствС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ мноТСство интСрфСйсов.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ класса, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ интСрфСйсов. Π’ этом случаС Ρ‚ΠΈΠΏ класса Π΄ΠΎΠ»ΠΆΠ΅Π½
Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Когда ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ интСрфСйса, допустимы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ этот интСрфСйс. Указывая ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ класс ΠΈ интСрфСйс Π»ΠΈΠ±ΠΎ мноТСство интСрфСйсов, примСняйтС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ & для ΠΈΡ… объСдинСния:

Π—Π΄Π΅ΡΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ классом ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ MyClass ΠΈ интСрфСйсом
Mylnterface. Π’ΠΎ Π΅ΡΡ‚ΡŒ любой Ρ‚ΠΈΠΏ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π’, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ подклассом класса MyClass ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ интСрфСйса Mylnterface.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΡƒΠ΄ΠΎΠ±Π΅Π½ сам ΠΏΠΎ сСбС, ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ конструкции.

НапримСр, класс Stats, рассмотрСнный Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ sameAvg(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, содСрТат Π»ΠΈ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Stats массивы, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° числовыС
значСния Π² Π½ΠΈΡ… содСрТатся.

НапримСр, Ссли ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит значСния Ρ‚ΠΈΠΏΠ° double 1.0, 2.0 ΠΈ 3.0, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” цСлочислСнныС значСния 2, 1 ΠΈ 3, Ρ‚ΠΎ срСднСС
Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρƒ Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Один ΠΈΠ· способов Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sameAvg() β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ класса Stats, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ со срСдним Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, возвращая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΠΎΠ½ΠΈ Ρ€Π°Π²Π½Ρ‹.

НапримСр, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ sameAvg(), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Π½Π°Ρ‡Π°Π»Π΅ написаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sameAvg() каТСтся простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ
класс Stats являСтся ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ average() ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ класса Stats любого Ρ‚ΠΈΠΏΠ°, каТСтся, Ρ‡Ρ‚ΠΎ написаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sameAvg() Π½Π΅ прСдставляСт слоТности. К соТалСнию, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° появляСтся сразу, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Stats. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Stats β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²Ρ‹ ΡƒΠΊΠ°ΠΆΠ΅Ρ‚Π΅ для Stats, ΠΊΠΎΠ³Π΄Π° создадитС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Stats?

Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π’ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°:

Π‘ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ связана ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса Stats, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ совпадаСт с Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΌ контСкстС ΠΈ Π½Π΅ прСдставляСт собой ΠΎΠ±Ρ‰Π΅Π³ΠΎ (Π° стало Π±Ρ‹Ρ‚ΡŒ, ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ) Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Π—Π΄Π΅ΡΡŒ Ρ‡Π°ΡΡ‚ΡŒ Stats соотвСтствуСт Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса Stats, Ρ‡Ρ‚ΠΎ позволяСт ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой срСдниС значСния Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Stats.

Π­Ρ‚ΠΎ дСмонстрируСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:
Π‘Ρ€Π΅Π΄Π½Π΅Π΅ для iob Ρ€Π°Π²Π½ΠΎ 3.0
Π‘Ρ€Π΅Π΄Π½Π΅Π΅ для dob Ρ€Π°Π²Π½ΠΎ 3.3
Π‘Ρ€Π΅Π΄Π½Π΅Π΅ для fob Ρ€Π°Π²Π½ΠΎ is 3.0
Π‘Ρ€Π΅Π΄Π½ΠΈΠ΅ iob ΠΈ dob ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ.
Π‘Ρ€Π΅Π΄Π½ΠΈΠ΅ iob ΠΈ fob Ρ€Π°Π²Π½Ρ‹.

И Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½, послСдний, ΠΌΠΎΠΌΠ΅Π½Ρ‚: Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ шаблон Π½Π΅ влияСт Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Stats. Π­Ρ‚ΠΈΠΌ управляСт слово extends Π² объявлСнии класса Stats. Π¨Π°Π±Π»ΠΎΠ½ просто соотвСтствуСт ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ класса Stats.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ способом, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ². ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ шаблон особСнно Π²Π°ΠΆΠ΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ классов. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ, обратимся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ.
Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

На Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ находится класс TwoD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ инкапсулируСт Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ XY. Π•Π³ΠΎ наслСдник β€” класс ThreeD β€” добавляСт Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅, описывая ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ XYZ. ΠžΡ‚ класса ThreeD наслСдуСтся класс FourD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ (врСмя), пороТдая Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Coords, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ массив ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ класс Coords Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ классом TwoD. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ любой массив, сохранСнный Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Coords, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° TwoD ΠΈΠ»ΠΈ любой ΠΈΠ· Π΅Π³ΠΎ подклассов.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ X ΠΈ Y для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² массивС coords ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Coords.
ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса Coords ΠΈΠΌΠ΅ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΏΠ°Ρ€Ρƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (X ΠΈ Y), это Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблона:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс Coords β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚
класс TwoD ΠΊΠ°ΠΊ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, всС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Coords, Π±ΡƒΠ΄ΡƒΡ‚ массивами Ρ‚ΠΈΠΏΠ° TwoD ΠΈΠ»ΠΈ классов, наслСдуСмых ΠΎΡ‚ Π½Π΅Π³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ showXY() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ содСрТимоС любого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Coords.

Но Ρ‡Ρ‚ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ X, Y ΠΈ Z ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° классов ThreeD ΠΈΠ»ΠΈ FourD?

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ шаблон Π·Π°Π΄Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ ΠΈΠ»ΠΈ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Ρ‚ΠΈΠΏΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.
Π­Ρ‚ΠΎ позволяСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄.
НаиболСС популярСн шаблон, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ свСрху, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСтся с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° extends, ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ описании ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.
ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ X, Y ΠΈ Z для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса Coords, Ссли этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ эти Ρ‚Ρ€ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ showXYZ() ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ элСмСнтов, сохранСнных Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ класса Coords, Ссли эти элСмСнты ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ ThreeD (ΠΈΠ»ΠΈ унаслСдованы ΠΎΡ‚ класса ThreeD):

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая дСмонстрируСт дСйствиС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ шаблона Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ строки:

Π—Π΄Π΅ΡΡŒ супСркласс β€” это имя класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слуТит Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это β€” Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ класс, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² качСствС Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ (Ρ‚.Π΅. супСркласс), Ρ‚Π°ΠΊΠΆΠ΅ находится Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… допустимых Ρ‚ΠΈΠΏΠΎΠ².
Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ шаблона, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅
super ΠΊ объявлСнию шаблона. Π’ΠΎΡ‚ Π΅Π³ΠΎ общая Ρ„ΠΎΡ€ΠΌΠ°.

Π’ этом случаС допустимыми Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ супСрклассами для подклассa. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ конструкция, ΠΏΠΎcΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ класс подклассa.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² Java для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…: синтаксис, Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Π΄ΠΈΠΊΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹

РазбираСмся, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² свой ΠΊΠΎΠ΄.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Оля Π•ΠΆΠ°ΠΊ для Skillbox Media

Π£ нас Π² ΠΏΠ°Ρ€Π°Π΄Π½ΠΎΠΉ подъСздС рядом с ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΌΠΈ ящиками стоит ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΠ΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹ΠΉ спам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»ΠΈ ΡƒΠΏΠΎΡ€Π½ΠΎ ΠΊΠ»Π°Π΄ΡƒΡ‚ Π² эти самыС ящики. Но Π² ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ΅ вмСстС с Π±ΡƒΠΌΠ°ΠΆΠΊΠ°ΠΌΠΈ Π»Π΅ΠΆΠ°Ρ‚ пустыС Π±ΡƒΡ‚Ρ‹Π»ΠΊΠΈ ΠΈ Π±Π°Π½ΠΊΠΈ, ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Π° Π² Π½Ρ‹Π½Π΅ΡˆΠ½ΠΈΡ… рСалиях β€” Π΅Ρ‰Ρ‘ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ мСдицинскиС маски. ΠŸΠΎΡ‡Π΅ΠΌΡƒ люди Ρ‚Π°ΠΊ Π΄Π΅Π»Π°ΡŽΡ‚? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ Π²Ρ‹ ΠΎΡ‚Π²ΠΎΠ·ΠΈΡ‚Π΅ Π½Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π° ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· приходится ΠΎΡ‚Π΄Π΅Π»ΡΡ‚ΡŒ Π±ΡƒΠΌΠ°Π³Ρƒ ΠΎΡ‚ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ мусора. НС Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ Π²Ρ‹ Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, которая Π½Π΅ даст ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² сСбя Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Π±ΡƒΠΌΠ°Π³ΠΈ? Если ваш ΠΎΡ‚Π²Π΅Ρ‚ Β«Π΄Π°Β» β€” Π²Π°ΠΌ понравятся Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (generics).

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

ЀулстСк-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. Π›ΡŽΠ±ΠΈΠΌΡ‹ΠΉ стСк: Java + Angular, Π½ΠΎ Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π³ΠΎΡ‚ΠΎΠ²Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ…ΠΎΡ‚ΡŒ Π½Π° языкС Ада.

Знакомимся с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ

Π”ΠΎ появлСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² программисты ΠΌΠΎΠ³Π»ΠΈ нСявно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ класс, интСрфСйс ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с элСмСнтами ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°:

Π—Π΄Π΅ΡΡŒ прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ printSomething Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со списком строк. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ ΠΎΠ± этом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ всС элСмСнты приводятся (ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ) ΠΊ классу String, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π΅Ρ‰Ρ‘ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ length этого класса вызываСтся.

Но смотритС, Ρ‡Ρ‚ΠΎ сдСлали программисты Баша ΠΈ Маша, β€” ΠΎΠ½ΠΈ полСнились Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π² список: ΠΎΠ΄ΠΈΠ½ β€” число, Π° вторая β€” экзСмпляр StringBuilder.

Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСстировщик Π½Π°Π·Π½Π°Ρ‡ΠΈΠ» Π±Π°Π³ Π½Π΅ ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΈΠ· Π½ΠΈΡ…, Π° ПашС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написал ΠΌΠ΅Ρ‚ΠΎΠ΄ printSomething, β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎ врСмя Π΅Π³ΠΎ выполнСния.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Паша быстро Π½Π°ΡˆΡ‘Π» истинных Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠΎΠ² ΠΈ попросил ΠΈΡ… ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ списка. Но Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠ΄ΡΡ‚Ρ€Π°Ρ…ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуаций ΠΈ пСрСписал ΠΌΠ΅Ρ‚ΠΎΠ΄ с использованиСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π’ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π°Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² массив нСстроковый элСмСнт, ошибка станСт Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ сразу β€” Π΅Ρ‰Ρ‘ Π½Π° этапС компиляции.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсии Пашиного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° item Π½Π΅ приводится насильно ΠΊ Ρ‚ΠΈΠΏΡƒ String. ΠœΡ‹ просто ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт списка, ΠΈ компилятор ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ это, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ строка. Код стал ΠΌΠ΅Π½Π΅Π΅ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ, Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ стало ΠΏΡ€ΠΎΡ‰Π΅.

ОбъявляСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классы ΠΈ создаём ΠΈΡ… экзСмпляры

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚Ρƒ ΡΠ°ΠΌΡƒΡŽ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ шла Ρ€Π΅Ρ‡ΡŒ Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ: создадим класс Box, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с элСмСнтами ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΡƒΡΡ‚ΡŒ для простоты Π² этой ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ΅ ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ элСмСнт:

Π’ классС Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π’ΠΎ всСх случаях, ΠΊΡ€ΠΎΠΌΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° класса, символ T ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π±Π΅Π· ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобок, ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ для Π±ΡƒΠΌΠ°Π³ΠΈ. ΠŸΡƒΡΡ‚ΡŒ Π·Π° Π±ΡƒΠΌΠ°Π³Ρƒ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ класс Paper, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, экзСмпляр ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ создаётся Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ записи, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΊΠΎΡ€ΠΎΡ‡Π΅:

Π’Π°ΠΊ ΠΊΠ°ΠΊ слСва ΠΌΡ‹ ΡƒΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ компилятору, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Π° ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ для Π±ΡƒΠΌΠ°Π³ΠΈ, справа ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Paper β€” компилятор «догадаСтся» ΠΎ Π½Ρ‘ΠΌ сам.

Π­Ρ‚ΠΎ Β«ΡƒΠ³Π°Π΄Ρ‹Π²Π°Π½ΠΈΠ΅Β» называСтся type inference β€” Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Β« <>Β» β€” это diamond operator. Π•Π³ΠΎ Ρ‚Π°ΠΊ Π½Π°Π·Π²Π°Π»ΠΈ ΠΈΠ·-Π·Π° внСшнСго сходства с Π±Ρ€ΠΈΠ»Π»ΠΈΠ°Π½Ρ‚ΠΎΠΌ.

E β€” element, для элСмСнтов ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ;

K β€” key, для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ map-структур;

V β€” value, для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ map-структур;

N β€” number, для чисСл;

T β€” type, для обозначСния Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… классах;

S, U, V ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классС нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классы Ρ…ΠΎΡ€ΠΎΡˆΠΈ своСй ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ: с классом Box Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ для Π±ΡƒΠΌΠ°Π³ΠΈ, Π½ΠΎ ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ для сбора пластика ΠΈΠ»ΠΈ стСкла:

А ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Ρ‘ дальшС ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ для ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ с двумя отсСками. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, Π² ΠΎΠ΄Π½ΠΎΠΌ отсСкС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΡΡ пластик, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ β€” стСкло:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ type inference ΠΈ diamond operator ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части.

ОбъявляСм ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-интСрфСйсы

ОбъявлСниС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ- интСрфСйсов ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° объявлСниС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классов. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ‚Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ создадим интСрфСйс ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ GarbageHandler сразу с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: Ρ‚ΠΈΠΏ мусора ΠΈ способ ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ:

Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ‚ΡŒ) этот интСрфСйс ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ, Π½Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ- классС:

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΡ‚ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ ΠΈ сначала ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс с двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

Или ΡΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π²Π° способа ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ:

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классы ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-интСрфСйсы вмСстС Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

МоТно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠΎΠ² Β«Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠΈΒ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ Π²Π°ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Box β€” просто Box:

Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ случая Π΄Π°ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ β€” raw type, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «сырой Ρ‚ΠΈΠΏΒ». Π­Ρ‚Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ оставили Π² языкС для совмСстимости со старым ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» написан Π΄ΠΎ появлСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ².

Π’ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‚Π°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ рСкомСндуСтся. Π”Π° ΠΈ Π·Π°Ρ‡Π΅ΠΌ? Π’Π΅Π΄ΡŒ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ способС Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ всС прСимущСства использования Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ².

ПишСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классах ΠΈ интСрфСйсах. Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ.

Π”ΠΎ этого ΠΌΡ‹ использовали Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ обозначСния Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класса ΠΈΠ»ΠΈ интСрфСйса, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нашСго ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ опция: сбор опасных ΠΎΡ‚Ρ…ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сотрудники вывозят Π½Π° ΡƒΡ‚ΠΈΠ»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто. НапишСм ΠΌΠ΅Ρ‚ΠΎΠ΄ для этого:

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° transfer Π΅ΡΡ‚ΡŒ свой Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ обязан ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π½ΠΈ с Ρ‚ΠΈΠΏΠΎΠΌ T, Π½ΠΈ с Ρ‚ΠΈΠΏΠΎΠΌ S. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠ°ΠΊ ΠΈ Π² случаС с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ класса ΠΈΠ»ΠΈ интСрфСйса, ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΈ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… (Π½Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ) классах ΠΈ интСрфСйсах. Наш класс для ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π—Π΄Π΅ΡΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° синтаксис: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ послС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа ( public), Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ ( void). Они ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² ΠΎΠ±Ρ‰ΠΈΡ… ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ свСрху ΠΈ снизу

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠΌ нашС прСдставлСниС ΠΎ мусорС ΠΈ Π²Π²Π΅Π΄Ρ‘ΠΌ для Π½Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство β€” массу Β«Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ прСдставитСля», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ массу ΠΎΠ΄Π½ΠΎΠΉ пластиковой Π±ΡƒΡ‚Ρ‹Π»ΠΊΠΈ ΠΈΠ»ΠΈ листка Π±ΡƒΠΌΠ°Π³ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту массу Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ³ΠΎ класса Box:

И ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ компиляции: ΠΌΡ‹ Π½Π΅ рассказали компилятору, Ρ‡Ρ‚ΠΎ T β€” это ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²ΠΈΠ΄ мусора. Π˜ΡΠΏΡ€Π°Π²ΠΈΠΌ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ upper bounding β€” ограничСния свСрху:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getItemWeight ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилируСтся.

Π—Π΄Π΅ΡΡŒ T extends Garbage ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² качСствС T ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Garbage ΠΈΠ»ΠΈ любой класс-наслСдник Garbage. Из ΡƒΠΆΠ΅ извСстных Π½Π°ΠΌ классов это ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Paper ΠΈΠ»ΠΈ Plastic. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ Ρƒ Garbage, ΠΈ Ρƒ всСх Π΅Π³ΠΎ наслСдников Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ getWeight, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класса Box.

Для ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ интСрфСйса ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ сразу нСсколько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Вспомним ΠΏΡ€ΠΎ интСрфСйс для ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΏΡ€ΠΈΡ‘ΠΌΠ° мусора ΠΈ Π²Π²Π΅Π΄Ρ‘ΠΌ класс для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ β€” HandleMethod. Π’ΠΎΠ³Π΄Π° GarbageHandler ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Wildcards

Π’Π΅Ρ€ΠΌΠΈΠ½ wildcard ΠΏΡ€ΠΈΡˆΡ‘Π» Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹. Π’ ΠΏΠΎΠΊΠ΅Ρ€Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ°Ρ€Ρ‚Ρƒ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‹Π³Ρ€Π°Ρ‚ΡŒ вмСсто любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π”ΠΆΠΎΠΊΠ΅Ρ€ β€” извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ Β«Π΄ΠΈΠΊΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹Β».

Wildcard нСльзя ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΄ΠΎ этого ΠΌΡ‹ писали Π±ΡƒΠΊΠ²Π΅Π½Π½Ρ‹Π΅ обозначСния. НС получится, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ класс Box ΠΈΠ»ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ:

Wildcards ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для объявлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² совмСстно с классами ΠΈΠ· Java Collection Framework β€” здСсь собраны инструмСнты Java для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с коллСкциями. Если Π²Ρ‹ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π½ΠΈΠΌΠΈ, освСТитС знания, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² эту ΡΡ‚Π°Ρ‚ΡŒΡŽ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ вмСсто Β«?Β» любой Ρ‚ΠΈΠΏ, Π² Ρ‚ΠΎΠΌ числС Paper, поэтому строка ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ скомпилируСтся:

Wildcards ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ для ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ²:

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π½Π°ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ свСрху, upper bounding, β€” вмСсто Β«?Β» допуст ΠΈΠΌ Garbage ΠΈΠ»ΠΈ любой Π΅Π³ΠΎ класс-наслСдник, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Paper ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

Но ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ снизу. Π­Ρ‚ΠΎ называСтся lower bounding ΠΈ выглядит Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ понятия, связанныС с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ

ΠœΡ‹ Π½Π΅ успСли Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Π±ΠΎΠ»Π΅Π΅ слоТными Π²Π΅Ρ‰Π°ΠΌΠΈ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π·Π°ΠΌΠ΅Π½Π°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ² Π² классах-наслСдниках, с ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π΅ ΡƒΠ·Π½Π°Π»ΠΈ ΠΎΠ± особСнностях ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ с wildcards.

Обо всём этом ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ…. А ΠΏΠΎΠΊΠ° собСрём нСбольшой словарик ΠΈΠ· Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с использованиСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ², β€” ΠΎΠ½ΠΈ пригодятся ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹:

Π’Π΅Ρ€ΠΌΠΈΠ½Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°
Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΡ‹ (generic types)Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс ΠΈΠ»ΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-интСрфСйс с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (parameterized types)Π’Ρ‹Π·ΠΎΠ² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ°. Для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ° List ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, List
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° (type parameter)Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ объявлСнии Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠΎΠ². Для Box T β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°
АргумСнт Ρ‚ΠΈΠΏΠ° (type argument)Π’ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°. НапримСр, для Box

Paper β€” это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ°

WildcardΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ΡΡ символом Β«?Β» β€” нСизвСстный Ρ‚ΠΈΠΏ
ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ wildcard (bounded wildcard)Wildcard, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ свСрху β€” ΠΈΠ»ΠΈ снизу β€”
Π‘Ρ‹Ρ€ΠΎΠΉ Ρ‚ΠΈΠΏ (raw type)Имя Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ° Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ°. Для List сырой Ρ‚ΠΈΠΏ β€” это List

Π•Ρ‰Ρ‘ большС ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…, коллСкциях ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… элСмСнтах языка Java ΡƒΠ·Π½Π°ΠΉΡ‚Π΅ Π½Π° нашСм курсС Β«ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΡ Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΒ». Научим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° самом вострСбованном языкС ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ссылочного Ρ‚ΠΈΠΏΠ° хранят адрСс ячСйки Π² памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
Π’ этом ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ хранится само Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
ВсС ссылочныС Ρ‚ΠΈΠΏΡ‹ Π² Java Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Object.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² Java: Ρ‡Π°ΡΡ‚ΡŒ 1

ΠžΠ“Π›ΠΠ’Π›Π•ΠΠ˜Π•

Аннотация

Java 5 (JDK 1.5) Π²Π²Π΅Π» ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Данная ΡΡ‚Π°Ρ‚ΡŒΡ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования. Π’ части II рассмотрСно, ΠΊΠ°ΠΊ обобщСния Π½Π° самом Π΄Π΅Π»Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Java, ΠΈ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° бСзопасности Ρ‚ΠΈΠΏΠΎΠ²

Π³Π΄Π΅ aBookReference – ссылка Ρ‚ΠΈΠΏΠ° Book, Π½Π΅ связанная с Dog, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции.

Однако, ΠΊ соТалСнию, ΠΏΡ€ΠΈ появлСнии Java, это Π½Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»ΠΎΡΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

НС контролируСтся Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° помСщаСтся Π² Vector. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹ΡˆΠ΅ создаСтся ArrayList, заполняСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ значСниями Integer, Π° Π·Π°Ρ‚Π΅ΠΌ значСния ΡΡƒΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Π΅ΠΌ извлСчСния Integer ΠΈΠ· ArrayList.

Π§Ρ‚ΠΎ Ссли ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ populateNumbers() ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Ошибок компиляции Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Однако ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ выполнится ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Выдастся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ошибка ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ:

Π”ΠΎ Java 5 Π² коллСкциях Π½Π΅ Π±Ρ‹Π»ΠΎ бСзопасности Ρ‚ΠΈΠΏΠΎΠ².

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ обобщСния?

НаконСц, Π² Java 5 Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ввСсти обобщСния. Π₯отя обобщСния – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, нСзависимый ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° – Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π² C++, Π΅ΡΡ‚ΡŒ ряд ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ. НапримСр, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ C++, Π³Π΄Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ классы для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π² Java Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, экзСмпляры ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ посрСдством Π½Π΅Π³ΠΎ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² обобщСниях Java Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² части II. Π’ части I Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ прСимущСства.

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² Java Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ GJ1 (ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Java), Π½Π°Ρ‡Π°Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ языка. Π—Π°Ρ‚Π΅ΠΌ эту идСю принял ΠŸΡ€ΠΎΡ†Π΅ΡΡ сообщСства Java (JCP) Π² качСствС Запроса спСцификации Java (JSR) 142.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²

НачнСм с рассмотрСнного Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ. ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ обобщСния. Π˜Π·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ArrayList вмСсто ArrayList. БСйчас ΠΏΡ€ΠΈ компиляции ΠΊΠΎΠ΄Π° выдаСтся ошибка компиляции:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ArrayList обСспСчиваСт Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ².

БоглашСния об имСновании

Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ настоящими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½ΠΎΠ³ΠΎ соглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ. Если Π²Ρ‹ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… соглашСний Java ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ программирования, Ρ‚ΠΎ навСрняка Π½Π΅ станСтС Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ваши классы ΠΎΠ΄Π½ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ рСгистр для ΠΈΠΌΠ΅Π½ классов, начиная с Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра. НиТС Π΄Π°Π½ΠΎ нСсколько соглашСний, примСняСмых для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ:

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρƒ E для элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ:

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ T, U, S ΠΈ Ρ‚.Π΄. для ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

НаписаниС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… классов

Бинтаксис для написания ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ класса ΠΎΡ‡Π΅Π½ΡŒ простой. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ класса:

Π­Ρ‚ΠΎΡ‚ класс прСдставляСт собой ΠΏΠ°Ρ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° E. Рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса:

Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚, выдастся ошибка компиляции. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π—Π΄Π΅ΡΡŒ прСдпринимаСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ экзСмпляр Integer ΠΈ экзСмпляр Double экзСмпляру Pair. Однако это Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ замСняСмости Лискова. Поясним Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Допустим, Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ€Π·ΠΈΠ½Π° Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ². Π’ Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°ΠΏΠ΅Π»ΡŒΡΠΈΠ½Ρ‹, Π±Π°Π½Π°Π½Ρ‹, Π²ΠΈΠ½ΠΎΠ³Ρ€Π°Π΄ ΠΈ Ρ‚.Π΄. Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΊΠΎΡ€Π·ΠΈΠ½Ρƒ Π±Π°Π½Π°Π½ΠΎΠ². Π’ Π½Π΅Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°Π½Π°Π½Ρ‹. Она Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ². Π‘Π°Π½Π°Π½ являСтся Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠΌ, Ρ‚.Π΅. Π±Π°Π½Π°Π½ наслСдуСтся ΠΎΡ‚ Ρ„Ρ€ΡƒΠΊΡ‚Π°. Π”ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ ΠΊΠΎΡ€Π·ΠΈΠ½Π° Π±Π°Π½Π°Π½ΠΎΠ² Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ Ρ„Ρ€ΡƒΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС Π½ΠΈΠΆΠ΅?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ этот ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ даст ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ компиляции:

Π§Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Pair ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ? Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно ΠΏΠΎΠ·ΠΆΠ΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π·Π½Π°ΠΊΒ».

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ, посмотрим Π½Π° ΠΎΠ΄Π½ΠΎ странноС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ:

Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ – Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ:

Pair Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° являСтся Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ класса Pair. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ, поэтому ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ обСспСчиваСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ, Π½Π΅ пСрСнСсСнным для использования ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ такая ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ прСимущСство, ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠΎΠ².

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Наряду с классами, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ArrayList lst1 заполняСтся трСмя значСниями, Π° Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ содСрТимоС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ΡΡ (копируСтся) Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ArrayList lst2. Π Π°Π·ΠΌΠ΅Ρ€ lst2 послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° filter() Ρ€Π°Π²Π΅Π½ 2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²:

Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции:

Ошибка Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ArrayList Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ. Π₯ΠΎΡ€ΠΎΡˆΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ компилируСтся Π±Π΅Π· ошибок, ΠΈ Π²Ρ‹Π·ΠΎΠ² lst3.size() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ скомпилировался, ΠΈ Ρ‡Ρ‚ΠΎ здСсь происходит? ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π»Π΅Π·Π΅Ρ‚ ΠΈΠ· ΠΊΠΎΠΆΠΈ Π²ΠΎΠ½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, рассматривая lst3 ΠΊΠ°ΠΊ простой ArrayList, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (смотритС послСдний Π°Π±Π·Π°Ρ† Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ β€œΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒβ€ Π²Ρ‹ΡˆΠ΅), ΠΎΠ½ Π² состоянии Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ filter.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ряду ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡˆΠ΅. ΠŸΡ€ΠΈ Π½Π°Ρ‡Π°Π»Π΅ Π½Π°Π±ΠΎΡ€Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ интСгрированная срСда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (IDE) (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ IntelliJ IDEA) подсказываСт ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ java

Она Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ индСкс ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Integer. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄:

Как Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого ΠΊΠΎΠ΄Π°? ΠœΠΎΠΆΠ΅Ρ‚, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния? Π‘ΡŽΡ€ΠΏΡ€ΠΈΠ·! Π­Ρ‚ΠΎΡ‚ кусок ΠΊΠΎΠ΄Π° даст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π—Π΄Π΅ΡΡŒ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Integer ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ сгСнСрируСт ClassCastException. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ прСдполагаСтся, Ρ‡Ρ‚ΠΎ обобщСния Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ бСзопасным ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ Ρ‚ΠΈΠΏΠ°ΠΌ, Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ, ΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎ ΠΈΠ»ΠΈ случайно, ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΈ, Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния ΠΈΠ»ΠΈ, Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π₯Π²Π°Ρ‚ΠΈΡ‚ ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ рассмотрСны Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части II. Π’ части I ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π’Π΅Ρ€Ρ…Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ простой ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для опрСдСлСния наибольшСго ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° выглядСл Π±Ρ‹ Ρ‚Π°ΠΊ:

Использовали Π±Ρ‹ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π‘ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ Π΄ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° max()? ΠŸΠΎΠΏΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это:

Π­Ρ‚ΠΎ Π½Π΅ сработаСт. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ > Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² ссылках. Как ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°? ВспоминаСтся интСрфСйс Comparable(сравнимый). ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс comparable для выполнСния этой Π·Π°Π΄Π°Ρ‡ΠΈ:

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΠ½ нСкрасив. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, приходится ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ случай, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Comparable Π½Π΅ удаСтся. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊ сильна Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ этот интСрфСйс, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ компилятор Π½Π°Π²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ? ИмСнно это Π΄Π΅Π»Π°ΡŽΡ‚ Π²Π΅Ρ€Ρ…Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс Comparable. Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ max() с экзСмплярами Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ интСрфСйс Comparable, выдастся строгая ошибка компиляции.

ΠŸΠΎΠ΄ΡΡ‚Π°Π½ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Π·Π½Π°ΠΊ

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π±ΠΎΠ»Π΅Π΅ интСрСсным ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Класс Animal(ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅) ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ playWith(), ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Animal. Dog(собака), Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π°Ρ Animal, пСрСопрСдСляСт этот ΠΌΠ΅Ρ‚ΠΎΠ΄. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Dog Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Π—Π΄Π΅ΡΡŒ создаСтся экзСмпляр Dog ΠΈ отправляСтся коллСкция Dog Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ playWith(). ВыдаСтся ошибка компиляции:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Dog нСльзя Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Animal, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ playWith() (смотритС Ρ€Π°Π·Π΄Π΅Π» β€œΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒβ€ Π²Ρ‹ΡˆΠ΅). Однако Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Dog этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? Π—Π΄Π΅ΡΡŒ вступаСт Π² Π΄Π΅Π»ΠΎ подстановочный Π·Π½Π°ΠΊ ΠΈΠ»ΠΈ нСизвСстный Ρ‚ΠΈΠΏ.

Оба ΠΌΠ΅Ρ‚ΠΎΠ΄Π° playMethod()(Π² Animal ΠΈ Dog) ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Collection Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Animal. ВмСсто этого ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ нСизвСстный Ρ‚ΠΈΠΏ (?). НСизвСстный Ρ‚ΠΈΠΏ – Π½Π΅ Object, ΠΎΠ½ просто нСизвСстный ΠΈΠ»ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ.
Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠΎΠ΄:

компилируСтся Π±Π΅Π· ошибок. Однако Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

ИзмСнСниС, сдСланноС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Dog ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ playWith(), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ позволяСт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Integer. Если Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ это, получится странная собака. Как ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ компилятор Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Animal ΠΈΠ»ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ любого Ρ‚ΠΈΠΏΠ°, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰Π΅Π³ΠΎ Animal, Π½ΠΎ Π½Π΅ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²? Π­Ρ‚ΠΎ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

НиТниС ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹

Рассмотрим послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, Π½Π°Π΄ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это:

ΠŸΠΎΠΏΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ΡΡ Dog ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Dog ArrayList Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Dog являСтся Animal, Dog ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Dog ArrayList ΠΈ Π² Animal ArrayList, Π½Π΅ Ρ‚Π°ΠΊ Π»ΠΈ? Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ· Dog ArrayList Π² Animal ArrayList.

Однако ΠΏΡ€ΠΈ компиляции этого ΠΊΠΎΠ΄Π° выдаСтся ошибка:

Как Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π½ΠΈΠΆΠ½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Copy Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ T ΠΈΠ»ΠΈ любой Ρ‚ΠΈΠΏ, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ T. Код выглядит Ρ‚Π°ΠΊ:

Π—Π΄Π΅ΡΡŒ сказано, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏ являСтся Ρ‚ΠΈΠΏΠΎΠΌ T ΠΈΠ»ΠΈ Π΅Π³ΠΎ супСртипом.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π±Ρ‹Π»Π° ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΠΌΠΎΡ‰ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² Java. Однако с использованиСм ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² Java Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Π² части II Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π’ части II Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, рСализация ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² Java, эффСкт стирания Ρ‚ΠΈΠΏΠ°, измСнСния Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ классов Java Ρ€Π°Π΄ΠΈ обСспСчСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ прСобразования Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Ρ… ΠΊΠ°ΠΌΠ½Π΅ΠΉ ΠΈΠ»ΠΈ нСдостатков ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ.

Π’ части I Π±Ρ‹Π»ΠΈ рассмотрСны ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² Java ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ². ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Они ΠΏΡ€ΠΎΡ‰Π΅ шаблонов Π² C++ ΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ раздувания ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ компиляции. Π’ части II Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ примСнСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *