Java Guru πŸ€“
13.4K subscribers
933 photos
15 videos
788 links
Канал с вопросами ΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ с собСсСдований!

По сотрудничСству ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅: @NadikaKir

Канал Π² ΠΏΠ΅Ρ€Π΅Ρ‡Π½Π΅ РКН: https://vk.cc/cJrSQZ

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
55%
Tt.iss.onethodA 1
15%
Tt.iss.onethodA 2
10%
Tt.iss.onethodA 0
7%
Ошибка выполнСния
14%
Ошибка компиляции
πŸ‘24❀4
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Type Erasure?

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ удаляСт ΠΈΠ· Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π° класс-Ρ„Π°ΠΉΠ»Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ…-Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…. Π­Ρ‚ΠΎΡ‚ процСсс ΠΈ называСтся стираниС Ρ‚ΠΈΠΏΠΎΠ² (type erasure). Он появился Π² Java 5 вмСстС с самими Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ. Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· пСрСкомпилляции ΠΊΠΎΠ΄Π° Java 4.

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… дСйствий:
πŸ”˜ Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ (bounded), вмСсто Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² мСстах использования подставляСтся вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π°, ΠΈΠ½Π°Ρ‡Π΅ Object;
πŸ”˜ Π’ мСстах присвоСния значСния Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° добавляСтся каст ΠΊ этому Ρ‚ΠΈΠΏΡƒ;
πŸ”˜ Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ bridge-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… стираСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΎ остаСтся Π² ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ самого класса. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Field#getGenericType.

Π’ΠΈΠΏ со стСртой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… называСтся Β«Non-reifiableΒ».

Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² позволяСт Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Π½ΠΎΠ²Ρ‹Π΅ классы, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, шаблонов C++.
πŸ‘28❀1❀‍πŸ”₯1
Π§Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘8🍾2
Как ограничиваСтся Ρ‚ΠΈΠΏ generic ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°?

Π’ объявлСнии Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° класса ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° Π΅Π³ΠΎ вСрхняя Π³Ρ€Π°Π½ΠΈΡ†Π° (bound)

class Foo<T extends Number>

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово extends примСняСтся ΠΊΠ°ΠΊ для классов, Ρ‚Π°ΠΊ ΠΈ для интСрфСйсов. ЀактичСским ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ класса Foo ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ сам Number, ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСдники.

Помимо ограничСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… примСняСмых Ρ‚ΠΈΠΏΠΎΠ², bounded-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π΄Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля Ρ‚ΠΈΠΏΠ°-ограничитСля – ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ фактичСского Ρ‚ΠΈΠΏΠ°. Π­Ρ‚ΠΎ достигаСтся стираниСм Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Π²Π΅Ρ€Ρ…Π½ΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ†, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ-пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ²: <T extends Comparable & Serializable>. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ· Π³Ρ€Π°Π½ΠΈΡ†, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ послуТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² фактичСского Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π³Ρ€Π°Π½ΠΈΡ†Π°-класс, ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π° Ρ€Π°Π½ΡŒΡˆΠ΅ Π³Ρ€Π°Π½ΠΈΡ†-интСрфСйсов.
ΠŸΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ значСния Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ – символ ?. Π’Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ собираСмся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, этот Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ. Π­Ρ‚ΠΎ Π½Π΅ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ совсСм.

Для Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ для объявлСния Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ объявлСния здСсь нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ², ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Π² случаС Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

Foo<? super Number> foo;

ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅, Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π΅Π΄ΠΎΠΊ класса Number. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ»ΠΈ сам Number, ΠΈΠ»ΠΈ Object.

Π’ объявлСнии класса ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° использованиС super Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла.

Π Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² использования ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚
это Π²ΠΈΠ΄Π΅ΠΎ.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ API Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с классами-наслСдниками, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎ- ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΌ Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠŸΡ€ΠΈ этом Π±Π΅Π· bounded Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, какая Π³Ρ€Π°Π½ΠΈΡ†Π° Π½ΡƒΠΆΠ½Π° Π² ΠΊΠ°ΠΊΠΈΡ… случаях, Joshua Bloch ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΌΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΡƒ PECS:
Producer-extends, Consumer-super
πŸ‘16❀1
Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘11
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ?

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ/ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² – это сохранСниС/ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ порядка наслСдования для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Ρ… сущностСй Ρ‚ΠΈΠΏΠ°ΠΌΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΈ наслСдник, ΠΎΠ½ΠΈ сами становятся ΠΊΠ°ΠΊ Π±Ρ‹ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΈ наслСдником. ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, становятся наслСдником ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ.

Π›Π΅Π³Ρ‡Π΅ всСго ΠΎΡΠΎΠ·Π½Π°Ρ‚ΡŒ эти понятия Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:
πŸ”˜ ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: List<Integer> ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° List<? extends Number> (ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ наслСдник List<Number>).
πŸ”˜ ΠšΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ: Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° List<Number>
#sort Ρ‚ΠΈΠΏΠ° Comparator<? super Number> ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Comparator<Object> (ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ ΠΎΠ½ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Comparator<Number>)

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Β«ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒΒ» – Π½Π΅ совсСм наслСдованиС, Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ совмСстимыми (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Β«is aΒ»).

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ связанноС понятиС – ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ – это отсутствиС свойств ковариантности ΠΈ контрвариантности. Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π±Π΅Π· Π²Π°ΠΉΠ»Π΄ΠΊΠ°Ρ€Π΄ΠΎΠ² ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹: List<Number> нСльзя ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΈ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° List<Double>, Π½ΠΈ Π² List<Object>.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹: Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° String[].

ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² начиная с Java 5 ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΈΠΏΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.
πŸ‘20πŸ”₯1
Какой Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚?
πŸ‘11
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ bridge method?

Π’ Java отсутствуСт ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ – ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС. Когда Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ конкрСтизируСтся Π² наслСдникС, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ этого Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Ρ‚ΠΈΠΏΠ° большС Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π΅ – Π² наслСдникС Ρ‚ΠΈΠΏ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ, Π° Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ стСртый Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ простым ΠΈ бСзопасным кастом. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт ΠΏΠΎ сигнатурС с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ. Π’ Π΅Π³ΠΎ Ρ‚Π΅Π»Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ кастуСтся ΠΈ Π²Ρ‹Π·ΠΎΠ² дСлСгируСтся Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄. Π­Ρ‚ΠΎ ΠΈ называСтся bridge ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ.

Bridge method ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°. Π•Π³ΠΎ имя совпадаСт с ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сотрСтся Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ родитСля. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Ρ„Π»Π°Π³ΠΎΠΌ synthetic, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ написан Π½Π΅ программистом Π° компилятором.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС компиляции.
πŸ‘16πŸ”₯4❀1
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘17
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
36%
0
44%
-1
4%
НичСго ΠΈΠ· пСрСчислСнного
15%
Ошибка компиляции
πŸ‘37
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘11🌚2❀1⚑1
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
17%
Value 1
56%
Value 3
6%
Value 2
20%
Ошибка компиляции
πŸ‘19πŸ†3
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘7⚑2❀1
πŸ‘17🀨4🍾3
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘10
πŸ‘16❀1🌚1
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ heap pollution?

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, массивы Π² Java ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹. А Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Ρ‚ΠΈΠΏΠ° String[] Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° Object[], ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Integer. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ скомпилируСтся, Π½ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ записи ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ArrayStoreException.

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ List<Object> Π² List<String>, эта ΠΆΠ΅ ΠΏΠΎ сути ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π° этапС компиляции.

Heap pollution – ситуация, ΠΊΠΎΠ³Π΄Π° эта Π·Π°Ρ‰ΠΈΡ‚Π° Π½Π΅ срабатываСт, ΠΈ пСрСмСнная ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² сСбС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

List<String> strings = (List) new ArrayList<Integer>();

ДокумСнтация Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ компиляции всСго ΠΊΠΎΠ΄Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, heap pollution Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π±Π΅Π· Π²Π°Ρ€Π½ΠΈΠ½Π³Π° этапа компиляции.
Heap pollution ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² Π΄Π²ΡƒΡ… случаях: ΠΏΡ€ΠΈ использовании массивов Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΈ смСшивании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΈ raw-Ρ‚ΠΈΠΏΠΎΠ².

Raw types – это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π±Π΅Π· указания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с raw types, приводящий ΠΊ heap pollution, ΡƒΠΆΠ΅ Π±Ρ‹Π» описан Π²Ρ‹ΡˆΠ΅:

List<String> strings = (List) new ArrayList<Integer>();

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ raw types Π½Π΅ Π½Π°Π΄ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² Π³Π»Π°Π²Π΅ 26 Effective Java. Если информация ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… Π½Π΅ Π½ΡƒΠΆΠ½Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ символ wildcard (<?>).

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ даст ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ массив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС generic array creation. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π²Ρ‹ΡˆΠ΅ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΊ Ρ‡Π΅ΠΌΡƒ это ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ привСсти.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ varargs-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ‚.ΠΊ. varargs – Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-массив. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ компилятора Β«possible heap pollutionΒ». Если Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Ρ‡Ρ‚ΠΎ риска Π½Π΅Ρ‚, с Java 7 это ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π·Π°Π³Π»ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@SafeVarargs.
πŸ‘24❀5πŸ”₯3
Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ классный ΠΊΠ°Π½Π°Π» для изучСния Java
@Java_per_month
πŸ‘4