Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Вопросов:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сырой Ρ‚ΠΈΠΏ?

БпСцификация языка Java опрСдСляСт Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

JLS 4.8 НСобработанныС Ρ‚ΠΈΠΏΡ‹

НСобработанный Ρ‚ΠΈΠΏ опрСдСляСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·:

Π’ΠΈΠΏ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ формируСтся ΠΏΡƒΡ‚Π΅ΠΌ взятия ΠΈΠΌΠ΅Π½ΠΈ объявлСния ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π±Π΅Π· ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

Π’ΠΈΠΏ массива, Ρ‚ΠΈΠΏ элСмСнта ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ:

mt ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ (ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ компиляции) ΠΏΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ; inn Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠΎ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌΡƒ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ.

mt1 ΠΈ mt2 ΠΎΠ±Π° ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с фактичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ°, поэтому ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ особСнного Π² Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…?

По сути, Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎ появлСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ Π²ΠΎ врСмя компиляции.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ просто ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

Π§Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ отличаСтся ΠΎΡ‚ использования Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°?

НиТС приводится Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Effective Java 2nd Edition, ΠΏΡƒΠ½ΠΊΡ‚ 23. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ :

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

Π§Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ отличаСтся ΠΎΡ‚ использования Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°?

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°:

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ JLS 4.8:

БупСрклассы (соотвСтствСнно, супСринтСрфСйсы) Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ стираниСм супСрклассов (супСринтСрфСйсов) любой ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΉ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

JLS 4.6 ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ конструктора Ρ‚Π°ΠΊΠΆΠ΅ ΡΡ‚ΠΈΡ€Π°ΡŽΡ‚ΡΡ, Ссли сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ конструктора ΡƒΠ΄Π°Π»Π΅Π½Π°.

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ подписи ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

Если это нСбСзопасно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ?

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· JLS 4.8:

ИспользованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС уступки совмСстимости ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ИспользованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ΄Π΅, написанном послС ввСдСния ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² язык программирования Java, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ рСкомСндуСтся. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ вСрсии языка программирования Java Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ использованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Effective Java 2nd Edition Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Учитывая, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ»ΠΈ это? Для обСспСчСния совмСстимости.

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ?

К соТалСнию, ΠΈΠ·-Π·Π° Π½Π΅ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Java Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π³Π΄Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π² Java, ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я часто ΡΠ»Ρ‹ΡˆΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅?

Π₯отя это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ошибки всС ΠΆΠ΅ ΡΠ»ΡƒΡ‡Π°Π»ΠΈΡΡŒ

Π‘Ρ‚Π°Ρ€Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ², поэтому программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.
ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ объявлял Π±Ρ‹ сохранСнный Ρ‚ΠΈΠΏ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ компилятор сдСлал Π±Ρ‹ это вмСсто этого.

Π‘ΠΎΠ»Π΅Π΅ слоТный сравниваСмый интСрфСйс:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ CompareAble интСрфСйс compareTo(MyCompareAble) с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ компилятор: Generics ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимы, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ классы Java, Ρ‡Ρ‚ΠΎ ΠΈ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. Магия происходит Π² основном Π²ΠΎ врСмя компиляции.

Π‘ΡƒΠ΄Π΅Ρ‚ скомпилировано ΠΊΠ°ΠΊ:

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ написали Π±Ρ‹, Ссли Π±Ρ‹ использовали нСпосрСдствСнныС Ρ‚ΠΈΠΏΡ‹. Π₯отя я Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ происходит с CompareAble интСрфСйсом, я ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ создаСт Π΄Π²Π΅ compareTo Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ a, MyCompareAble Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Object ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ послС привСдСния.

КакиС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ

Если фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡƒΡ‰Π΅Π½, Π²Ρ‹ создаСтС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Box :

Но Ссли Π²Ρ‹ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для Π²Ρ‹Π·ΠΎΠ²Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅:

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ обходят ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ², откладывая ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ нСбСзопасного ΠΊΠΎΠ΄Π° Π΄ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π Π°Π·Π΄Π΅Π» Erasure Type содСрТит большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ компилятор Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

НСпровСрСнныС сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΈ смСшивании ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΌΠΈ сообщСниями, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Example.java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСбСзопасныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ использовании старого API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

НапримСр, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Java-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ стали доступны, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Когда Π²Ρ‹ добавляСтС свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² список, Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ это Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΠ· списка, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно привСсти Π΅Π³ΠΎ ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, Π²Ρ‹ удаляСтС «нСизвСстный» Ρ„Π°ΠΊΡ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Π² спискС:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ· Π²Ρ‹Π·ΠΎΠ²Π° get, коллСкция ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с MyObject. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ являСтся основным Π΄Π²ΠΈΠΆΡƒΡ‰ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ источник ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π²ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΎ врСмя компиляции.

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я часто ΡΠ»Ρ‹ΡˆΡƒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅?

«НСобработанныС Ρ‚ΠΈΠΏΡ‹Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Π˜Ρ… использованиС Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ использованиС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° обСспСчиваСт Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ привСсти ΠΊ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΌΡƒ Π²Ρ‹ΡΠ²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

Какая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, Ссли ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΈ ΠΊΠ°ΠΊ это Π»ΡƒΡ‡ΡˆΠ΅?

НапримСр, для ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ программист Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ пСрСмСнная List с ΠΈΠΌΠ΅Π½Π΅ΠΌ ‘names’ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки:

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

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² Java для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€ΡˆΠ΅: стираниС Ρ‚ΠΈΠΏΠΎΠ², наслСдованиС ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS

РассказываСм, ΠΊΠ°ΠΊ Π² любой нСпонятной ситуации ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΡ‹.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…Β» ΠΌΡ‹ рассказали ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (generics), Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’Π°ΠΌ ΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ ограничСния (boundings) ΠΈ wildcards. Π‘Π΅Π· этих основ Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ написано дальшС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ освСТитС знания, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

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

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Π½Π΅ Π΄ΠΎΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΎ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠΉ части рассказа ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…: Ρ‚Π°ΠΌ Π±Ρ‹Π» класс Box β€” ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° для сбора мусора: ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π² Π½Π΅Ρ‘ ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Π½Π΅Ρ‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим экзСмпляр Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса ΠΈ подставим вмСсто T ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Paper β€” для ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π±ΡƒΠΌΠ°Π³Ρƒ:

МоТно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ с Ρ‚Π°ΠΊΠΈΠΌ классом:

Π­Ρ‚Π° запись ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ класс Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с Ρ‚Π΅ΠΌ, Π²ΠΎ Ρ‡Ρ‚ΠΎ прСвращаСтся Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс ΠΈΠ»ΠΈ интСрфСйс Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ class-Ρ„Π°ΠΉΠ» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Он создаёт ΠΎΠ΄ΠΈΠ½ class-Ρ„Π°ΠΉΠ» для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ°.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ стираСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅, замСняя всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ( unbounded) Ρ‚ΠΈΠΏΠΎΠΌ Object, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ ( bounded) β€” Π½Π° эти Π³Ρ€Π°Π½ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ называСтся type erasure.

ΠšΡ€ΠΎΠΌΠ΅ стирания (ΠΈΠ½ΠΎΠ³Π΄Π° говорят «затирания») Ρ‚ΠΈΠΏΠΎΠ², компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (cast) ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π½Ρ‹Π΅ bridge-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π² классах-наслСдниках.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° Π±Π΅Π· Π³Ρ€Π°Π½ΠΈΡ†

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° Object. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ получится для нашСго класса-ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° с Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ

Объявим Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-интСрфСйс c ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ свСрху ( upper bounding):

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΡ‚ этого останСтся послС компиляции:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. Bridge-ΠΌΠ΅Ρ‚ΠΎΠ΄

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ класс-наслСдник ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ для Π±ΡƒΠΌΠ°Π³ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π² Π½Ρ‘ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ putItem:

Π­Ρ‚ΠΎΠΌΡƒ классу Π½Π΅ всё Ρ€Π°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ приходят ΠΊ Π½Π΅ΠΌΡƒ Π² putItem, β€” Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Ρ‚ΠΈΠΏΠ° Paper. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ компилятору придётся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ класс β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ bridge-ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ°:

А Π²ΠΎΡ‚ Π΅Ρ‰Ρ‘ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚ Π½ΠΈΡ… останСтся послС компиляции:

Π”ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈΠŸΠΎΡΠ»Π΅ компиляции
>Box
Box
List []List[]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎ type erasure ΠΈ Π΅Π³ΠΎ послСдствия, навСрняка смоТСтС ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос, ΠΏΠΎΡ‡Π΅ΠΌΡƒ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Exception:

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ try catch провСряСтся Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ компилятор Π΄Π°ΠΆΠ΅ Π½Π΅ даст Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ относится ΠΊ классу Throwable ΠΈ Π΅Π³ΠΎ наслСдникам.

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ наслСдника Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класса

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1. Класс-наслСдник β€” Π½Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ, Π½Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-класс, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ вмСсто ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° T ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈ сдСлали β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Π»ΠΈ Paper.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2. Класс-наслСдник ΠΈ сам Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ с Ρ‚Π΅ΠΌ ΠΆΠ΅ числом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρƒ Box ΠΈ SuperGenericBox Π½Π΅ обязаны ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒΡΡ Π±ΡƒΠΊΠ²ΠΎΠΉ T (ΠΎΡ‚ type) β€” ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ€Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±ΡƒΠΊΠ²Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅, ΠΈΠ½Π°Ρ‡Π΅ компилятор Π½Π΅ разбСрётся.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3. Класс-наслСдник β€” Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ числом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π—Π΄Π΅ΡΡŒ ΡƒΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Один ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, напишСм ΠΌΠ΅Ρ‚ΠΎΠ΄ newMethod с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ этого Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π£ наслСдника класса-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ноль (ΠΊΠΎΠ³Π΄Π° это вовсС Π½Π΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ). Π“Π»Π°Π²Π½ΠΎΠ΅ β€” ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ всС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² класса-наслСдника.

Π§Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ°ΠΌΠΈ классов-наслСдников

Π’ Java ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ссли Ρ‚ΠΈΠΏΡ‹ совмСстимы: Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ интСрфСйс ΠΈΠ»ΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ наслСдования.

НапримСр, PaperBox β€” наслСдник Box, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ компилируСтся:

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ is a (являСтся): бумаТная ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° β€” это ΠΊΠΎΡ€ΠΎΠ±ΠΊΠ° (являСтся ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΎΠΉ). Или говорят, Ρ‡Ρ‚ΠΎ PaperBox β€” это ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ (subtype) Box. ΠŸΡ€ΠΈ этом Box β€” супСртип PaperBox.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π½Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΊΠΎΡ€ΠΎΠ±ΠΊΡƒ, Π° Π΅Ρ‘ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ( Box ), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ»Π°ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ мусора: Paper, Glass ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ β€” наслСдники Garbage:

Π’ этом случаС Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Garbage, Ρ‚Π°ΠΊ ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ:

Но Ρ‡Ρ‚ΠΎ, Ссли Box станСт Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°? Π‘ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ Π² этом случаС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏ? НапишСм простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

И убСдимся, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΠ΅Π½Π° Ρ‚ΡƒΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Paper β€” ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ Garbage, Box

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, Π΄Π°ΠΆΠ΅ Ссли A β€” ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ B, Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΎΡ‚ A Π½Π΅ являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° ΠΎΡ‚ B.

Для сравнСния, массивы Π² Java ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹: Ссли A β€” ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ B, A[] β€” ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ B[].

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

Как ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ°ΠΌΠΈ

ΠŸΠΎΡ‚Ρ€Π΅Π½ΠΈΡ€ΡƒΠ΅ΠΌΡΡ сначала Π½Π° простых Ρ‚ΠΈΠΏΠ°Ρ… ΠΈ вспомним, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ сигнатуру Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. НапримСр, Ρƒ Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΈΠΏΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, Ссли Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ исходного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. НапримСр, Ρ‚Π°ΠΊ:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ:

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π΅Ρ‰Ρ‘ ΠΏΠ°Ρ€Ρƒ возмоТностСй для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ пСрСопрСдСлСния. Оно Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€Π½Ρ‹ΠΌ, Ссли:

Π—Π²ΡƒΡ‡ΠΈΡ‚ слоТно, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ взглянСм Π½Π° ΠΊΠΎΠ΄:

ΠŸΡ€Π°Π²Π΄Π°, Π² ΠΎΠ±ΠΎΠΈΡ… случаях компилятор ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСбСзопасном использовании Ρ‚ΠΈΠΏΠΎΠ² ( unchecked warning):

Note: GlassBox.java uses unchecked or unsafe operations.

Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ: исходный ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ возвращался список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Garbage, Π° ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ хотят просто ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ список. Π’Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Garbage, Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ β€” Π²ΠΎΡ‚ компилятору ΠΈ Ρ‚Ρ€Π΅Π²ΠΎΠΆΠ½ΠΎ.

Π—Π°Ρ‚ΠΎ Ссли Π² исходном ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ β€” с wildcard Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚:

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ числом ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ обозначСния этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

Π’ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Π½Π°Π·Π²Π°Π½ S, Π° Π½Π΅ T, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ остаётся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ.

А Π²ΠΎΡ‚ ограничСния для Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° Π² ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ нСльзя:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΡΡ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π° просто ΠΌΠ΅Ρ‚ΠΎΠ΄ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ.

Π—Π°Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ спокоСн, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классС Box станСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ послС type erasure β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° Object.

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, Ссли:

Как wildcards с ограничСниями «портят» ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS

Если Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с коллСкциями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², ΡƒΠ΄ΠΎΠ±Π½Ρ‹ wildcards с ограничСниями.

НапримСр: List ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ список ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Paper ΠΈ всСх Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ², Π° Π² List ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° Paper ΠΈ всСх супСртипов β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Garbage ΠΈΠ»ΠΈ Object.

Π‘ wildcards ΠΈ коллСкциями Π΅ΡΡ‚ΡŒ малСнькая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ‚ΡƒΡˆΠΊΡƒ: свободно Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ β€” ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS.

PECS β€” Producer Extends, Consumer Super. Π•Π³ΠΎ ΡΡƒΡ‚ΡŒ:

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ с extends нСльзя Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ, Π° ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с super нСльзя Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ? Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ всё понятно, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ сюда экзСмпляр Paper β€” наслСдника Garbage:

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции. Π›Π°Π΄Π½ΠΎ, Ρ‚ΠΎΠ³Π΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚, хотя Π±Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Garbage ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚?

И снова Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS Π½Π΅ соврал β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ‚Π°ΠΊΠΎΠΉ список Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСльзя. ЕдинствСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” null. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ:

Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ создадим ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ снизу:

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚ΡƒΠ΄Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Paper:

И ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Если Π²Π΅Ρ€ΠΈΡ‚ΡŒ PECS, Ρƒ нас это Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ:

Но компилятору всё нравится β€” Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ошибок Π½Π΅Ρ‚. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, начнутся, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° Paper ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°, совмСстимого с Π½ΠΈΠΌ:

Вторая Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° PECS ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… снизу, нСльзя Π±Π΅Π· явного привСдСния Ρ‚ΠΈΠΏΠ° (cast) ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π³Ρ€Π°Π½ΠΈΡ‡Π½ΠΎΠ³ΠΎ класса, Π΄Π° ΠΈ всСх Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ Ρ‚ΠΎΠΆΠ΅. ЕдинствСнноС, Ρ‡Ρ‚ΠΎ доступно, β€” Ρ‚ΠΈΠΏ Object:

К соТалСнию, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· producer, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² customer. ΠœΡ‹ Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ своСго ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°, Π½ΠΎ сдСлали Ρ‚Π°Π±Π»ΠΈΡ‡ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ вмСстС всС ΠΏΡ€Π°Π²ΠΈΠ»Π°:

Π’ΠΈΠΏ ограничСнияЧто ΠΌΠΎΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ
extends SomeType>ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ SomeType ΠΈ всСх Π΅Π³ΠΎ ΡΡƒΠΏΠ΅Ρ€Ρ‚ΠΈΠΏΠΎΠ²Π’ΠΎΠ»ΡŒΠΊΠΎ null
super SomeType>ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° ObjectΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° SomeType ΠΈ всСх Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ²

И Π΄Π°ΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ нарисовали:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС ΠΈ сырыС Ρ‚ΠΈΠΏΡ‹ raw type Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ Π·Π°ΠΏΡƒΡ‚Π°Π΅Ρ‚Π΅ΡΡŒ πŸ™‚

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

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

НСобработанныС Ρ‚ΠΈΠΏΡ‹ Π² Java

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹? Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ с этим Π΄Π΅Π»Π°Ρ‚ΡŒ.

1. Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ этом ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΌ руководствС ΠΌΡ‹ рассмотрим Ρ‚ΠΈΠΏΡ‹ rawtypes, Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡ… ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

2. НСобработанныС Π’ΠΈΠΏΡ‹

НСобработанный Ρ‚ΠΈΠΏ – это имя ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ интСрфСйса ΠΈΠ»ΠΈ класса Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ°:

НСобработанныС Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ взаимодСйствии с Π½Π΅Ρ€ΠΎΠ΄ΠΎΠ²Ρ‹ΠΌ унаслСдованным ΠΊΠΎΠ΄ΠΎΠΌ.

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΎΠ΄Π½Π°ΠΊΠΎ, это обСскураТиваСт. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ:

3. ΠΠ΅Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ

НСобработанный Ρ‚ΠΈΠΏ Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ List – это список, содСрТащий String s. Однако Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ этой ясности, Ρ‡Ρ‚ΠΎ затрудняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌ ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ API.

4. НС ВипобСзопасно

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это, создав Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт экзСмпляр List ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ List ΠΈ добавляСт ΠΊ Π½Π΅ΠΌΡƒ Π¦Π΅Π»ΠΎΠ΅ число :

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΠ· – Π·Π° использования Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

5. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎ врСмя выполнСния

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ бСзопасности Ρ‚ΠΈΠΏΠΎΠ² Π² Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π½ΠΎ-слСдствСнныС послСдствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ Π²ΠΎ врСмя выполнСния.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ method ΠΏΠΎΠ»ΡƒΡ‡Π°Π» элСмСнт Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ индСкса 1 нашСго List послС Π²Ρ‹Π·ΠΎΠ²Π° Method/|:

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

Π‘ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ошибкам Π² нашСм ΠΊΠΎΠ΄Π΅.

Π˜Ρ… использованиС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ катастрофичСским послСдствиям, ΠΈ, ΠΊ соТалСнию, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· этих катастроф происходит Π²ΠΎ врСмя выполнСния.

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

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π² Java ОбъяснСно

Π£Π·Π½Π°ΠΉΡ‚Π΅ ΠΎ Π²Π°ΠΆΠ½ΠΎΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Java ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

1. ΠžΠ±Π·ΠΎΡ€

Π’ этой ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ обсудим основы Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… прилоТСниях Java, извСстного ΠΊΠ°ΠΊ стираниС Ρ‚ΠΈΠΏΠΎΠ².

2. Π§Ρ‚ΠΎ Π’Π°ΠΊΠΎΠ΅ Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Π’ΠΈΠΏΠ°?

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ процСсс примСнСния ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя компиляции ΠΈ удалСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ элСмСнта Π²ΠΎ врСмя выполнСния.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ замСняСт нСсвязанный Ρ‚ΠΈΠΏ E фактичСским Ρ‚ΠΈΠΏΠΎΠΌ ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π° :

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ компилятор обСспСчиваСт Ρ‚ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ нашСго ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ошибки Π²ΠΎ врСмя выполнСния.

3. Π’ΠΈΠΏΡ‹ стирания Ρ‚ΠΈΠΏΠΎΠ²

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ классов (ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

3.1. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Класса

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π‘Ρ‚Π΅ΠΊ с использованиСм массива:

ΠŸΡ€ΠΈ компиляции компилятор замСняСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ нСсвязанного Ρ‚ΠΈΠΏΠ° E Π½Π° ΠžΠ±ΡŠΠ΅ΠΊΡ‚ :

Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° E привязан:

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ связанного Ρ‚ΠΈΠΏΠ° E ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ связанным классом, Бопоставимым Π² этом случаС :

3.2. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Π’ΠΈΠΏΠ° ΠœΠ΅Ρ‚ΠΎΠ΄Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄ отобраТСния содСрТимого любого Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ массива:

ΠŸΡ€ΠΈ компиляции компилятор замСняСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° E Π½Π° ΠžΠ±ΡŠΠ΅ΠΊΡ‚ :

Для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° связанного ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π£ нас Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° E ΡƒΠ΄Π°Π»Π΅Π½ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° Бопоставимый:

4. ΠšΡ€Π°ΠΉΠ½ΠΈΠ΅ Π‘Π»ΡƒΡ‡Π°ΠΈ

Иногда Π² процСссС стирания Ρ‚ΠΈΠΏΠΎΠ² компилятор создаСт синтСтичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ для различСния ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΠΈΠ· сигнатур ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΡ… ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ связанный класс.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

ПослС стирания Ρ‚ΠΈΠΏΠ° Ρƒ нас Π΅ΡΡ‚ΡŒ:

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π΅ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку ΠΈ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π¦Π΅Π»ΠΎΠ΅ число Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ClassCastException ΠΈΠ· привСдСния, вставлСнного Π²ΠΎ врСмя push компилятором.

4.1. ΠœΠΎΡΡ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ описанный Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹ΠΉ случай, компилятор ΠΈΠ½ΠΎΠ³Π΄Π° создаСт ΠΌΠ΅Ρ‚ΠΎΠ΄ моста. Π­Ρ‚ΠΎ синтСтичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, созданный компилятором Java ΠΏΡ€ΠΈ компиляции класса ΠΈΠ»ΠΈ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ класс ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ интСрфСйс, Π³Π΄Π΅ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΌΠΈ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ компилятор Java сохраняСт ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² послС удалСния, гарантируя отсутствиС нСсоотвСтствия сигнатур ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π¦Π΅Π»Ρ‹ΠΌ стСком s push(Π¦Π΅Π»ΠΎΠ΅ число) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈ Π‘Ρ‚Π΅ΠΊΠΎΠΌ s push(ΠΎΠ±ΡŠΠ΅ΠΊΡ‚) ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, компилятор создаСт здСсь ΠΌΠ΅Ρ‚ΠΎΠ΄ моста:

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π‘Ρ‚Π΅ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса push послС удалСния Ρ‚ΠΈΠΏΠ° Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ исходный push ΠΌΠ΅Ρ‚ΠΎΠ΄ ЦСлочислСнного стСка класса.

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

Π’ этом ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ пособии ΠΌΡ‹ обсудили ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ стирания Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΎΠ± этих концСпциях:

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

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сырой Ρ‚ΠΈΠΏ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Вопросы:

ΠžΠ’Π’Π•Π’Π«

ΠžΡ‚Π²Π΅Ρ‚ 1

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ?

БпСцификация языка Java опрСдСляСт Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

JLS 4.8 НСобработанныС Ρ‚ΠΈΠΏΡ‹

НСобработанный Ρ‚ΠΈΠΏ опрСдСляСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·:

Π’ΠΈΠΏ ссылки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ формируСтся ΠΏΡƒΡ‚Π΅ΠΌ принятия ΠΈΠΌΠ΅Π½ΠΈ объявлСния Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π±Π΅Π· списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π’ΠΈΠΏ массива, Ρ‚ΠΈΠΏ элСмСнта ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ:

mt ΠΈΠΌΠ΅Π΅Ρ‚ исходный Ρ‚ΠΈΠΏ (ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ компиляции) ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ; inn Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ особСнного Π² сырых Ρ‚ΠΈΠΏΠ°Ρ…?

По сути, сырыС Ρ‚ΠΈΠΏΡ‹ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎ появлСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π²ΠΎ врСмя компиляции ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΊΠΎΠ½Π½ΠΎ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Как исходный Ρ‚ΠΈΠΏ отличаСтся ΠΎΡ‚ использования ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ°?

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· Effective Java 2nd Edition, Item 23: НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ raw-Ρ‚ΠΈΠΏΡ‹ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅:

Если Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ appendNewObject Π½Π° использованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° raw type List as, Ρ‚ΠΎ это скомпилируСтся, ΠΈ поэтому Π²Ρ‹ потСряСтС Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΎΡ‚ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ².

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Как исходный Ρ‚ΠΈΠΏ отличаСтся ΠΎΡ‚ использования ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°?

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°:

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ JLS 4.8:

Π’ качСствС Ρ‚ΠΈΠΏΠ° стирания ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ стираниС Ρ‚ΠΈΠΏΠ° массива, Ρ‚ΠΈΠΏ элСмСнта ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ называСтся Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ.

Π’ Π±ΠΎΠ»Π΅Π΅ простых выраТСниях, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ raw, конструкторы, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ экзСмпляра ΠΈ Π½Π΅ static Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

JLS 4.6 ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ конструктора Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ ΡΡ‚ΠΈΡ€Π°Π½ΠΈΡŽ, Ссли подпись ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ»ΠΈ конструктора стираСтся.

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ сигнатуры ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ ΠΎΠ± ошибкС содСрТатся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ мысли ΠΎΡ‚ ΠœΠ°ΡƒΡ€ΠΈΡ†ΠΈΠΎ Π§ΠΈΠΌΠ°Π΄Π°ΠΌΠΎΡ€Π°, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°-компилятора, ΠΈ АлСкс Π‘Π°ΠΊΠ»ΠΈ, ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² JLS, ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: https://bugs.openjdk.java.net/browse/JDK-6400189. (ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ.)

Если это нСбСзопасно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ?

Π—Π΄Π΅ΡΡŒ другая Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· JLS 4.8:

ИспользованиС Ρ‚ΠΈΠΏΠΎΠ² raw допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ уступка совмСстимости ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ИспользованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΊΠΎΠ΄Π΅, написанном послС ввСдСния родословности Π² язык программирования Java, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ рСкомСндуСтся. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠ΅ вСрсии языка программирования Java Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Ρ‚ΡŒ использованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π’ эффСктивном Java 2nd Edition Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Учитывая, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹ языка Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΈΡ…? Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Java Π²ΠΎΡ‚-Π²ΠΎΡ‚ вступит Π² своС Π²Ρ‚ΠΎΡ€ΠΎΠ΅ дСсятилСтиС, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΈ прСдставлСны Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, ΠΈ сущСствовало ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Java-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ использовал Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ. Π‘Ρ‹Π»ΠΎ сочтСно критичСски Π²Π°ΠΆΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ вСсь этот ΠΊΠΎΠ΄ остаСтся Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ ΠΈ совмСстим с Π½ΠΎΠ²Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ. Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляры ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для использования с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅, извСстноС ΠΊΠ°ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, приняло Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ raw.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΠ˜ΠšΠžΠ“Π”Π Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π’Ρ‹ всСгда Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

НСт Π»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ?

К соТалСнию, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Java-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅:

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

ΠžΡ‚Π²Π΅Ρ‚ 2

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΈΠΏΡ‹ raw Π² Java ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я часто ΡΠ»Ρ‹ΡˆΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅?

Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΈ ошибки

Π’ старых Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… коллСкциях нСльзя Π±Ρ‹Π»ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ², поэтому программисту ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ…Ρ€Π°Π½ΠΈΠ» Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.
Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ сохранСнный Ρ‚ΠΈΠΏ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΈ вмСсто этого компилятор сдСлаСт это.

Π‘ΠΎΠ»Π΅Π΅ слоТный интСрфСйс Compareable:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс CompareAble с compareTo(MyCompareAble) с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ компилятор: Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимы, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ классы Java, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ сырыС Ρ‚ΠΈΠΏΡ‹. Магия происходит Π² основном Π²ΠΎ врСмя компиляции.

Π‘ΡƒΠ΄Π΅Ρ‚ скомпилирован ΠΊΠ°ΠΊ:

ΠšΠ°ΠΊΠΎΠ²Ρ‹ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ сырым Ρ‚ΠΈΠΏΠ°ΠΌ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ generics

ΠžΡ‚Π²Π΅Ρ‚ 3

Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ фактичСского Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡƒΡ‰Π΅Π½, Π²Ρ‹ создаСтС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Box :

Но Ссли Π²Ρ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚ΠΈΠΏ raw для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ Ρ€ΠΎΠ΄ΠΎΠ²ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅:

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° обходят ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ, откладывая ΡƒΠ»ΠΎΠ² нСбСзопасного ΠΊΠΎΠ΄Π° Π½Π° врСмя выполнСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΌ слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «Π’ΠΈΠΏ стирания» содСрТится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ компилятор Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

НСпровСрСнныС сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΈ смСшивании ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ сообщСния, ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Example.java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ нСбСзопасныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΈ использовании Π±ΠΎΠ»Π΅Π΅ старого API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠžΡ‚Π²Π΅Ρ‚ 4

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ сообщаСт, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ generics, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ.

ΠžΡ‚Π²Π΅Ρ‚ 5

НапримСр, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΈ созданы Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Java, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Когда Π²Ρ‹ добавляСтС свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² список, Π΅ΠΌΡƒ всС Ρ€Π°Π²Π½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠ½ Π΅ΡΡ‚ΡŒ, ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΠ· списка, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ generics, Π²Ρ‹ удаляСтС «Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΉ» коэффициСнт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Π² спискС:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ€ΠΎΡΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, исходящий ΠΈΠ· Π²Ρ‹Π·ΠΎΠ²Π° get, сбор ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с MyObject. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ являСтся основным Π΄Π²ΠΈΠΆΡƒΡ‰ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ для Π³Π΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Он мСняСт источник ошибок Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Π²ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΎ врСмя компиляции.

ΠžΡ‚Π²Π΅Ρ‚ 6

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ…ΠΎΡ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ это записывали:

ΠžΡ‚Π²Π΅Ρ‚ 7

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я часто ΡΠ»Ρ‹ΡˆΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΡ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅?

«ΠΠ΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Π˜Ρ… использованиС Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ использованиС ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ класса с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° позволяСт Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΠ½ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ привСсти ΠΊ появлСнию ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ€Π°Π½ΡŒΡˆΠ΅.

Какая Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°, Ссли ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΊΠ°ΠΊ это Π»ΡƒΡ‡ΡˆΠ΅?

НапримСр, для ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ программист Ρ…ΠΎΡ‡Π΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрСмСнная List, называСмая «ΠΈΠΌΠ΅Π½Π°», содСрТала Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки:

ΠžΡ‚Π²Π΅Ρ‚ 8

Π—Π΄Π΅ΡΡŒ я Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽ нСсколько случаСв, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ

Π‘Π»ΡƒΡ‡Π°ΠΉ 1

Π­Ρ‚ΠΎ строгоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ String Π½Π΅ Raw Type, поэтому ΠΎΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅.

Π‘Π»ΡƒΡ‡Π°ΠΉ 2

Π’ этом случаС ArrayList arr являСтся строгим Ρ‚ΠΈΠΏΠΎΠΌ, Π½ΠΎ ваш ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ new ArrayList(); являСтся сырым Ρ‚ΠΈΠΏΠΎΠΌ.

Π‘Π»ΡƒΡ‡Π°ΠΉ 3

Π’ этом случаС ArrayList arr являСтся сырым Ρ‚ΠΈΠΏΠΎΠΌ, Π½ΠΎ ваш Object new ArrayList (); являСтся строгим Ρ‚ΠΈΠΏΠΎΠΌ.

ΠžΡ‚Π²Π΅Ρ‚ 9

НСобработанный Ρ‚ΠΈΠΏ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ double Π² Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ Set int s.

ΠŸΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈΠ· Set Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это всС int s, Π²Ρ‹ отбрасываСтС Π΅Π³ΠΎ Π½Π° Integer ; ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя выполнСния, ΠΊΠΎΠ³Π΄Π° ΠΈΠ΄Π΅Ρ‚ double 3.45.

ΠžΡ‚Π²Π΅Ρ‚ 10

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ случай, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΡƒΡΠ°Ρ‚ΡŒ вас:

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π² принятом ΠΎΡ‚Π²Π΅Ρ‚Π΅, Π²Ρ‹ тСряСтС всю ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° прСобразуСтся Π² Π΅Π³ΠΎ стираниС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ являСтся просто Object ).

ΠžΡ‚Π²Π΅Ρ‚ 11

Говорят, Ρ‡Ρ‚ΠΎ ваш list являСтся list ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Java Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ находятся Π²Π½ΡƒΡ‚Ρ€ΠΈ списка. Π—Π°Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ свойствам этого элСмСнта (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС String).

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это Π»ΡƒΡ‡ΡˆΠ°Ρ идСя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, поэтому Ρƒ вас Π½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π²Ρ‹ смоТСтС Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΈ ваш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ Π²Π°ΠΌ подходящиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Π²Ρ‹Π±ΠΎΡ€Π°.

ΠžΡ‚Π²Π΅Ρ‚ 12

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ поля, Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° T:

Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ фактичСского Ρ‚ΠΈΠΏΠ° ΠΎΠΏΡƒΡ‰Π΅Π½, Π²Ρ‹ создаСтС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Box:

ΠžΡ‚Π²Π΅Ρ‚ 13

Π― нашСл эту страницу послС выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Ρ… ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΉ ΠΈ с Ρ‚Π΅ΠΌ ΠΆΠ΅ самым Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ.

============== Π― ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» ΠΎΡ‚ этого ΠΊΠΎΠ΄Π°, прСдоставив ΠΎΠ±Ρ€Π°Π·Π΅Ρ† ================

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопаснСС, Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ 4 часа, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΡƒΡ€Π°Ρ‡ΠΈΡ‚ΡŒ Ρ„ΠΈΠ»ΠΎΡΠΎΡ„ΠΈΡŽ.

ΠžΡ‚Π²Π΅Ρ‚ 14

Π‘Ρ‹Ρ€Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ прСкрасны, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ.

ΠžΡ‚Π²Π΅Ρ‚ 15

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²

НСобработанныС Ρ‚ΠΈΠΏΡ‹ относятся ΠΊ использованию ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π±Π΅Π· указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°.

Бписок являСтся Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Π° List являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ.

Когда Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π±Ρ‹Π»ΠΈ прСдставлСны Π² JDK 1.5, Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±Ρ‹Π»ΠΈ сохранСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости со старыми вСрсиями Java. Π₯отя использованиС Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² всС Π΅Ρ‰Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ,

Π˜Ρ… слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ:

Они ΠΌΠ΅Π½Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΈ Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Ρ€

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

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

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