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
14%
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ - NoSuchMethodException
36%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - InvalidLength
29%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - Object successfully created
22%
Ошибка Π²ΠΎ врСмя компиляции.
πŸ‘10πŸ₯΄5
Π§Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ArrayStoreException?

Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»Π°ΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Вакая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° становится Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·-Π·Π° ковариантности массивов.

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ массива Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ. НапримСр, Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Object[] ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² любой массив:

 Object x[] = new String[3];
x[0] = new Integer(0);

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±Π΅Ρ€Π΅Ρ‚Π΅ элСмСнт ΠΈΠ· массива, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ прСдставитСлСм Ρ‚ΠΈΠΏΠ° элСмСнтов самого этого массива. НС Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° пСрСмСнная Π΅Π³ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚. ИмСнно для обСспСчСния этой Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, которая ΠΈ выбрасываСт ArrayStoreException.

Битуация ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ heap pollution Π² случаС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Волько для этого случая такая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Ρ€Π΅ΠΆΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° этапа компиляции:

// Ошибка компиляции – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹!
List<Object> x = new ArrayList<String>();
πŸ‘21
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘7
МоТно Π»ΠΈ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ generic-Ρ‚ΠΈΠΏΠ°?

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ – Π΄Π°. Как Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹Ρ… вопросов ΠΏΡ€ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, ΠΎΡ‚Π²Π΅Ρ‚ становится ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΌ Ссли ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π²ΠΎ Ρ‡Ρ‚ΠΎ сотрутся Ρ‚ΠΈΠΏΡ‹-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° T, этот Ρ‚ΠΈΠΏ T Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ объявлСн Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠΌ Throwable. ИмСнно Π² Throwable Π² Ρ‚Π°ΠΊΠΎΠΌ случаС сотрСтся T ΠΏΡ€ΠΈ компиляции. Π’Π°ΠΊΠΆΠ΅ Π² качСствС Ρ‚ΠΈΠΏΠ°-Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любого наслСдника Throwable:

class MyClass<T extends IOException> {
void foo() throws T {
// ...
}
}
πŸ‘17
Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΡ… – Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, Π° Ρ‡Ρ‚ΠΎ нСльзя?

1. МоТно Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ generic-Ρ‚ΠΈΠΏΠ°.
Π’ΠΈΠΏ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² throws, пСрСмСнная Ρ‚ΠΈΠΏΠ° T ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² throw. НСдавно ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎΠ± этом.

2. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ Π² catch.
ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ catch Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ΄Ρ‚ΠΈ Π±Π΅Π· ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС – ΠΎΡ‚ спСцифичного класса ΠΊ Π±ΠΎΠ»Π΅Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠΌΡƒ. Π‘Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ²-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² связи с этими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΎ Π±Ρ‹ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρƒ, Π½Π΅ нСся особой ΠΏΠΎΠ»ΡŒΠ·Ρ‹.

3. НСльзя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс-ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.
Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π²ΠΈΠ΄Π° class MyException<T> extends Throwable {}, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ generic class may not extend java.lang.Throwable.

4. МоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ generic-интСрфСйс.
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Comparable ΠΈΠ»ΠΈ Iterable. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° классах, Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ затрагивая интСрфСйсы.
πŸ‘15
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΊΠΎΠ΄?
πŸ‘15
πŸ‘23🌚5πŸ‘Œ3
Как ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ upcasting Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°?

Π—Π°Π΄Π°Ρ‡Π°: Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²:

<T> void pair(T a, T b) {}

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ pair(Foo, Foo), Π½ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ pair(Foo, Bar).

Upcasting – ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. String β†’ Object, Integer β†’ Number.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π»ΡŽΠ±Ρ‹Ρ… Π΄Π²ΡƒΡ… классов Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΎΠΊ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Object. Если Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ String ΠΈ Boolean – согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ вычислСния Ρ‚ΠΈΠΏΠ°-Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ T Π±ΡƒΠ΄Π΅Ρ‚ стСрт Π² Object.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ super Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚: для этого Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ.

Ѐокус Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° этапС компиляции это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ° всСгда являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°-родитСля (ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ is a). Π­Ρ‚ΠΎ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ООП, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ΡŒ. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°Ρ€ΡƒΡˆΠ°Π» Π±Ρ‹ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Лисков.

ЕдинствСнная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ повСдСния – с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getClass() ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ классы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.
πŸ‘26πŸ₯°1
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘12
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
42%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - 1
5%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - 2
43%
Ошибка Π²ΠΎ врСмя компиляции
10%
Ошибка Π²ΠΎ врСмя исполнСния
πŸ‘22🌭3
Когда Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ raw types?

Π‘Π½Π°Ρ‡Π°Π»Π° вспомним, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ raw type. Π’ Java Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ generic-Ρ‚ΠΈΠΏΡ‹ Π±Π΅Π· указания Ρ‚ΠΈΠΏΠ°-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Вакая языковая конструкция Π²Π°Π»ΠΈΠ΄Π½Π°, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ компилятора.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ связано с риском получСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ heap pollution. Π•ΠΉ ΠΌΡ‹ ΡƒΠΆΠ΅ посвящали ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ
Ρ€Π°Π½Π΅Π΅. ИспользованиС raw types Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ – спСцификация языка явно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

Π•ΡΡ‚ΡŒ всСго Ρ‚Ρ€ΠΈ случая, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ:
β€’ ЦСлСвая вСрсия Java < 5.0 (2002 Π³ΠΎΠ΄ ΠΈ Ρ€Π°Π½Π΅Π΅ – вряд Π»ΠΈ это ваш случай);
β€’ Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅ класса. List<String>.class Π½Π΅ сработаСт, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ List.class;
β€’ Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ instanceof. ВмСсто instanceof Set<Integer> Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ instanceof Set.
πŸ‘16πŸ”₯6
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ‘11
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
Anonymous Quiz
31%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - null
19%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - 1
30%
Π’Ρ‹Π²ΠΎΠ΄ Π² консоль - 2
20%
Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NullPointerException
πŸ‘19🍾1
Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ runtime ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ generic-Ρ‚ΠΈΠΏΠ΅?

Когда Π²Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ API-ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°. ОсобСнно часто с этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ парсСров. НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Jackson ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса. На ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ этот вопрос ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ практичСской Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ – Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ сработаСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ стёрт Π²ΠΎ врСмя компиляции, Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π²ΠΎ врСмя выполнСния.

РСшСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сработаСт для ΠΌΠ½ΠΎΠ³ΠΈΡ… случаСв – объявлСниС Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° Class<T>. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Foo.class ΠΈΠ»ΠΈ fooInstance.getClass(). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½ΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° становится Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ generic-Ρ‚ΠΈΠΏ. Бинтаксис .class Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, Π° .getClass() ΠΎΡ‚ экзСмпляров List<String> ΠΈ List<Integer> Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-описаниС сырого Ρ‚ΠΈΠΏΠ° List.

На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, описанная Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ
ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.

1. ΠžΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ generic класс-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π½Π°Π΄ Ρ‚ΠΈΠΏΠΎΠΌ: TypeInformation<T>;. Наш ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π² Π²ΠΈΠ΄Π΅ экзСмпляра этой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ.

2. Π’ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ добавляСтся конструктор с Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ protected. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наслСдников, Π½ΠΎ Π½Π΅ самого этого Ρ‚ΠΈΠΏΠ°.

3. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ экзСмпляр Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ наслСдника ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ: new TypeInformation<List<String>>() {}.

4. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π·ΠΎΠ² getClass().getGenericSuperclass() Π²Π΅Ρ€Π½Π΅Ρ‚ ParameterizedType. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ описаниС Ρ‚ΠΈΠΏΠ° родитСля Π°Π½ΠΎΠ½ΠΈΠΌΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ самой ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ. Из Π½Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ getActualTypeArguments() ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌ-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ° (ΠΎ List<String>).
πŸ‘24πŸ”₯6❀1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
πŸ‘13πŸ”₯3🀩1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π° экран ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
Anonymous Quiz
30%
true
31%
false
9%
4/2=true
30%
4/2=false
πŸ‘31β˜ƒ5πŸ”₯3🍌3🀩1
Как Spring Framework Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Dependency Injection?

Π˜Π½Π²Π΅Ρ€ΡΠΈΡ контроля (inversion of control, IoC) – ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ проСктирования, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ управлСния пСрСдаСтся Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ. Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ модуля этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ избавляСт ΠΎΡ‚ нСобходимости Π·Π½Π°Ρ‚ΡŒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… модулях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ дСталях ΠΈΡ… взаимодСйствия. Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ становится Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ зависимостСй (Dependency Injection, DI) – ΠΎΠ΄Π½Π° ΠΈΠ· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ IoC. ΠŸΡ€ΠΈ взаимодСйствии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ модулями, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ высокоуровнСвыми абстракциями, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ конкрСтная Π΅Ρ‘ рСализация поставляСтся Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ.

Бтандартная рСализация DI – Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ инстанциируСт всС сСрвисы, ΠΈ складываСт ΠΈΡ… Π² IoC-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ΠŸΡ€ΠΈ этом ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, Service Locator, занимаСтся поиском соотвСтствия Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ абстракциям ΠΈ ΠΈΡ… Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ.

Spring – большой Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. DI рСализуСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ – Spring IoC.

Бущности бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² Spring, ΠΊΠ°ΠΊ ΠΈ Π² JavaEE Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ beans. Π‘ΠΈΠ½Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами, ΠΊΠΎΡ€Π½ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΈΠ· Π½ΠΈΡ… Π»Π΅ΠΆΠ°Ρ‚ Π² понятии Configuration. Π’ качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±ΠΈΠ½ΠΎΠ² выступаСт ApplicationContext. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ зависимости контСксту, ΠΎΠ½Π° помСчаСтся Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ
@Autowired.
πŸ‘28πŸ”₯8⚑5❀1
Каким Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ компиляции ΠΈ выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°?
πŸ₯΄17πŸ‘7🀨5🌚2πŸ’”2