ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ классов (Generics)

Π’ языкС Java ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ классы Π±Π΅Π· привязки ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, ΠΌΡ‹ собираСмся Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ класс Point для прСдставлСния Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° плоскости с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x, y. И здСсь ΠΏΠ΅Ρ€Π΅Π΄ программистом сразу встаСт вопрос: ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρƒ этих ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚? Если Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ цСлочислСнныС Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ x, y, Ρ‚ΠΎ Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΈΠΏ int. Если ΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вСщСствСнныС значСния, Ρ‚ΠΎ Ρ‚ΠΈΠΏ float ΠΈΠ»ΠΈ double. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ double ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΈ цСлочислСнныС ΠΈ вСщСствСнныС значСния. Но это Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ вСщСствСнная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° выполняСтся Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ дольшС цСлочислСнной. И для цСлочислСнных ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ цСлочислСнный Ρ‚ΠΈΠΏ. Для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΎΠΉ ситуации Π² Java ΠΈ Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ классы с ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с классом Point Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ΅ описаниС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, здСсь послС ΠΈΠΌΠ΅Π½ΠΈ класса Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках стоит Π±ΡƒΠΊΠ²Π° T – это имя ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ записи класса ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π½Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ подставлСно вмСсто T. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ‚ΠΈΠΏ Integer ΠΈ Ρ‚ΠΈΠΏ Double ΠΈ Ρ‚ΠΈΠΏ String ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ языка Java (ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ…: int, float, double ΠΈ Ρ‚.ΠΏ). ПослС этого поля x, y Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этому Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΊΠΎΠ³Π΄Π° этот Ρ‚ΠΈΠΏ становится ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ? Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания экзСмпляра класса Point. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main() ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя класса, Π½ΠΎ ΠΈ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

И, Π·Π°Ρ‚Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ цСлочислСнныС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹:

Если ΠΏΠΎΡ‚ΠΎΠΌ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Point с вСщСствСнными полями, Ρ‚ΠΎ достаточно Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ссылка ptD Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ, Ρ‡Π΅ΠΌ ссылка pt. И, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΡ‚ такая строчка ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Point ΠΈ Point это, фактичСски, Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ построСнныС ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ класса Point. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ смысл обобщСния.

Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ вопрос: Π° ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² качСствС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΡƒΠΊΠ²Π° T? МоТно Π»ΠΈ вмСсто Π½Π΅Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΡƒΠΊΠ²Ρƒ ΠΈΠ»ΠΈ слово? Π”Π°, ΠΌΠΎΠΆΠ½ΠΎ. НапримСр, Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ΅ объявлСниС класса Point Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ:

Но, Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ программирования принято Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ просто ΠΎΠ΄Π½Ρƒ Π±ΡƒΠΊΠ²Ρƒ T.

Начиная с вСрсии JDK7 послС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ ΠΈΠΌΠ΅Π½ΠΈ класса ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠ³Π»ΠΎΠ²Ρ‹Π΅ скобки Π±Π΅Π· указания Ρ‚ΠΈΠΏΠ°(ΠΎΠ²), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ нСсколько Π±ΠΎΠ»Π΅Π΅ удобная запись ΠΈ Π΅Π΅ часто ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π² тСкстах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² класс Point конструктор. Он Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, здСсь ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ T Ρƒ Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². БоотвСтствСнно, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого класса, вмСсто T Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏ:

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ Π±Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ:

Но Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сразу массив ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π½Π΅ получится, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строчки ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ошибкС:

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ массив Π½Π° основС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просто Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпилирована Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ нСльзя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new с Π½Π΅ΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Но ΠΊΠ°ΠΊ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Π±Ρ‹Ρ‚ΡŒ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ? ΠžΡ‡Π΅Π½ΡŒ просто. Вспомним, Ρ‡Ρ‚ΠΎ всС классы Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ класс Object. ИмСнно Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°:

И, Π·Π°Ρ‚Π΅ΠΌ, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ main Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· этой ситуации. И глядя Π½Π° эти строчки, ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΌΡ‹ΡΠ»ΡŒ: Π° Π·Π°Ρ‡Π΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ эти обобщСния, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс Object Π² качСствС ΠΎΠ±Ρ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…? Π”Π°, Ρ‚Π°ΠΊ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ это ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ постоянно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ². И, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ контроля соотвСтствия Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ обобщСния. Благодаря этому Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с обобщСниями программист ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ мСньшС ошибок, Ρ‡Π΅ΠΌ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Object.

Класс с двумя ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ

Π― Π΄ΡƒΠΌΠ°ΡŽ, общая идСя использования ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ понятна. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаТок ΠΈ посмотрим ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ класс с двумя ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π² класс Point Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ id ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ V:

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, всС достаточно ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ. ΠœΡ‹ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ V ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ для опрСдСлСния поля id. Π’Π°ΠΊΠΆΠ΅ Ρƒ нас имССтся ΠΌΠ΅Ρ‚ΠΎΠ΄ getId(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ это ΠΏΠΎΠ»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² этого класса, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ°:

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ цСлочислСнный Ρ‚ΠΈΠΏ для id, Π° Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ – строковый. БоотвСтствСнно, Π½ΠΈΠΆΠ΅ полю id присваиваСм 1, Π° для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° – строку «point_1». По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ мноТСство Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса.

Π˜Ρ‚Π°ΠΊ, Π½Π° этом занятии ΠΌΡ‹ сдСлали Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² обобщСния (Generics) классов. На ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ эту Ρ‚Π΅ΠΌΡƒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ограничСния Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ интСрфСйсы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ обобщСния Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ наслСдования.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#11 ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (ООП)

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#12 ΠšΠ»Π°ΡΡΡ‹ ΠΈ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#13 ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово this, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#14 ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса, сСттСры ΠΈ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹, public, private, protected

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#15 ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ конструкторов ΠΈ классов

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#16 ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова static ΠΈ final

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#17 Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#18 Как дСлаСтся наслСдованиС классов

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#19 ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово super, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ instanceof

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#20 ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ private ΠΈ protected, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#21 АбстрактныС классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#24 АнонимныС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ классы

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#25 ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ (enum)

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#26 ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ классов (Generics)

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#27 ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ конструкторы

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

#28 ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ интСрфСйсы, наслСдованиС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… классов

Β© 2021 ЧастичноС ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с Π΄Π°Π½Π½ΠΎΠ³ΠΎ сайта для распространСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсах, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π±ΡƒΠΌΠ°ΠΆΠ½Ρ‹Ρ…, строго Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ. ВсС тСксты ΠΈ изобраТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ сайта

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

BestProg

Java. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΡ (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹. ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ классы

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

Поиск Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… рСсурсах:

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Β«ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Β» (шаблон) Π² языкС Java? Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ? ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ примСнСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ – это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ построСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ с Ρ†Π΅Π»ΡŒΡŽ Π΅Π³ΠΎ дальнСйшСго конвСртирования (прСобразования) Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ссылочный Ρ‚ΠΈΠΏ. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ конвСртирования ΠΈΠ· ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ) осущСствляСт компилятор.

2. ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° примСнСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ

ИспользованиС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² языкС Java Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прСимущСства:

3. ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° объявлСния ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ класса ΠΈ объявлСниС ссылки Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс

Π§Π°Ρ‰Π΅ всСго ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ с ΠΎΠ΄Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ. Π’ этом случаС общая Ρ„ΠΎΡ€ΠΌΠ° класса ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

ΠžΠ±Ρ‰Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° объявлСния ссылки Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ

НапримСр, Ссли Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚ΠΈΠΏ T

Ρ‚ΠΎ Π² этом классС ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ T

ПослС объявлСния, использованиС Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ класса для Ρ‚ΠΈΠΏΠ° Integer Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ

Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ объявлСнии Ρ‚ΠΈΠΏ Integer Π΅ΡΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ°.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра класса для Ρ‚ΠΈΠΏΠ° Double ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ класс SomeClass ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π»ΡŽΠ±Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

4. КакиС Ρ‚ΠΈΠΏΡ‹ запрСщаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… классах Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²?

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Ссли Π·Π°Π΄Π°Π½ класс

Ρ‚ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ экзСмпляр Ρ‚ΠΈΠΏΠ° int ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ удастся

5. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ поиска элСмСнта Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅

ΠœΠ΅Ρ‚ΠΎΠ΄ SearchKey() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

6. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осущСствляСт цикличСский сдвиг Π² массивС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Type

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

7. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°

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

ΠŸΡ€ΠΈΡˆΠ΅Π», ΡƒΠ²ΠΈΠ΄Π΅Π», ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΠ»: погруТаСмся Π² Java Generics

Java Generics β€” это ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π·Π° всю ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ языка Java. Β«Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈΒ», доступныС с Java 5, сдСлали использованиС Java Collection Framework ΠΏΡ€ΠΎΡ‰Π΅, ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ бСзопаснСС. Ошибки, связанныС с Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ использованиСм Ρ‚ΠΈΠΏΠΎΠ², Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° этапС компиляции. Π”Π° ΠΈ сам язык Java стал Π΅Ρ‰Π΅ бСзопаснСС. НСсмотря Π½Π° ΠΊΠ°ΠΆΡƒΡ‰ΡƒΡŽΡΡ простоту ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с трудностями ΠΏΡ€ΠΈ ΠΈΡ… использовании. Π’ этом постС я расскаТу ΠΎΠ± особСнностях Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Java Generics, Ρ‡Ρ‚ΠΎΠ±Ρ‹ этих трудностСй Ρƒ вас Π±Ρ‹Π»ΠΎ помСньшС. ΠŸΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡΡ, Ссли Π²Ρ‹ Π½Π΅ Π³ΡƒΡ€Ρƒ Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ…, ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ трудностСй ΠΏΡ€ΠΈ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π² Ρ‚Π΅ΠΌΡƒ.

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

Π Π°Π±ΠΎΡ‚Π° с коллСкциями

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π±Π°Π½ΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму сбСрСТСний Π½Π° счСтах ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π”ΠΎ появлСния Β«Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ²Β» ΠΌΠ΅Ρ‚ΠΎΠ΄ вычислСния суммы выглядСл Ρ‚Π°ΠΊ:

Π‘ появлСниСм Generics Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ΠΎΡ‚ΠΏΠ°Π»Π°:

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ строчкС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ ΠΎΡ‚ΠΏΠ°Π΄Π°Π»Π°. Если потрСбуСтся, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ( casting ) Π±ΡƒΠ΄Π΅Ρ‚ сдСлано Π½Π° этапС компиляции.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки

Π’ΠΈΠΏΠŸΠΎΠ΄Ρ‚ΠΈΠΏ
NumberInteger
ListArrayList
CollectionList
IterableCollection

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏ/ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° подстановки Π² Java:

ΠšΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΠ½Ρ‚Ρ€Π°Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

Но Ссли ΠΌΡ‹ попытаСмся ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС массива Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ arr ΠΈ запишСм Ρ‚ΡƒΠ΄Π° число 42, Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ArrayStoreException Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ 42 являСтся Π½Π΅ строкой, Π° числом. Π’ этом нСдостаток ковариантности массивов Java: ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° этапС компиляции, ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ ΡƒΠΆΠ΅ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅.

Β«Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈΒ» ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Wildcards

ВсСгда Π»ΠΈ Generics ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹? НСт. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

Π­Ρ‚ΠΎ ΠΊΠΎΠ²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ. List β€” ΠΏΠΎΠ΄Ρ‚ΠΈΠΏ List

ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс javaextends B β€” символ подстановки с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹
super B β€” символ подстановки с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹
Π³Π΄Π΅ B β€” прСдставляСт собой Π³Ρ€Π°Π½ΠΈΡ†Ρƒ

2. ΠŸΠΎΡ‡Π΅ΠΌΡƒ нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· списка Π½ΠΈΠΆΠ΅?

The Get and Put Principle ΠΈΠ»ΠΈ PECS (Producer Extends Consumer Super)

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ wildcard с Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ, связанныС с бСзопасным использованиСм Ρ‚ΠΈΠΏΠΎΠ². Из ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ (ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ null для extends ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Object для super ). Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ Π»Π΅Π³Ρ‡Π΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠΉ wildcard ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, сущСствуСт ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ PECS β€” Producer Extends Consumer Super.

ΠΈ Raw Ρ‚ΠΈΠΏΡ‹

Если ΠΌΡ‹ опустим ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ здСсь:

Если ΠΌΡ‹ попытаСмся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρƒ Raw Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ компилятор выдаст Π½Π°ΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Β«Unchecked callΒ». Если ΠΌΡ‹ попытаСмся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ присваиваниС ссылки Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Raw Ρ‚ΠΈΠΏΡƒ, Ρ‚ΠΎ компилятор выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Β«Unchecked assignmentΒ». Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ этих ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкам Π²ΠΎ врСмя выполнСния нашСго прилоТСния.

Wildcard Capture

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ пСрСстановку элСмСнтов списка Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎ Wildcard Capture ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь ΠΈ здСсь.

Π’Ρ‹Π²ΠΎΠ΄

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ°

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· класса Enum:

Multiple bounds (мноТСствСнныС ограничСния)

Π’Ρ‹Π²ΠΎΠ΄

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ свСрху ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Ρ‚ΠΈΠΏΠ°ΠΌΠΈ. Π’ случаС мноТСствСнного ограничСния лСвая Π³Ρ€Π°Π½ΠΈΡ†Π° (ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² процСссС затирания (Type Erasure).

Type Erasure

На ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π΅ Π½ΠΈΠΆΠ΅ Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:
ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ слСва происходит compile-time error, Π° справа всС компилируСтся Π±Π΅Π· ошибок. ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

Reifiable Ρ‚ΠΈΠΏΡ‹

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

РСшСниС Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ всС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ доступными Π²ΠΎ врСмя выполнСния β€” это ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² систСмС Ρ‚ΠΈΠΏΠΎΠ² Java. Π’Π°ΠΊ сдСлали, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, для совмСстимости с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Π—Π° ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ β€” полная Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ систСмы ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя выполнСния Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°.

И Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡ΠΊΠ°. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Exception?

КаТдоС catch Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² try-catch провСряСт Ρ‚ΠΈΠΏ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (Ρ‡Ρ‚ΠΎ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ instanceof), соотвСтствСнно, Ρ‚ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Reifiable. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Throwable ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹.

Unchecked Warnings

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ нашСго прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Unchecked Warning β€” ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор Π½Π΅ смог ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности использования Π½Π°ΡˆΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ ошибка, Π° ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. Но ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ всС-Ρ‚Π°ΠΊ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Heap Pollution

Как ΠΌΡ‹ упомянули Ρ€Π°Π½Π΅Π΅, присваиваниС ссылки Π½Π° Raw Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡŽ Β«Unchecked assignmentΒ». Если ΠΌΡ‹ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ситуация ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ » Heap Pollution » (загрязнСниС ΠΊΡƒΡ‡ΠΈ). Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ строкС (1) компилятор ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ ΠΎΠ± Β«Unchecked assignmentΒ».

Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Java Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ присваиваниС Π² строкС (1). Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости. Но Ссли ΠΌΡ‹ попытаСмся Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ add Π² строкС (2), Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Unchecked call β€” компилятор ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π΅Ρ‚ нас ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ошибкС. Π’ самом Π΄Π΅Π»Π΅, ΠΌΡ‹ ΠΆΠ΅ пытаСмся Π² список строк Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ число.

Reflection

Π₯отя ΠΏΡ€ΠΈ компиляции ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ стирания (type erasure), ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Reflection.

Π‘ появлСниСм Generics класс java.lang.Class стал ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ. Рассмотрим Π²ΠΎΡ‚ этот ΠΊΠΎΠ΄:

Π’Ρ‹Π²ΠΎΠ΄

Если информация ΠΎ Ρ‚ΠΈΠΏΠ΅ доступна Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ называСтся Reifiable. К Reifiable Ρ‚ΠΈΠΏΠ°ΠΌ относятся: ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π½Π΅ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ с Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ символом подстановки, Raw Ρ‚ΠΈΠΏΡ‹ ΠΈ массивы, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ reifiable.

Π˜Π³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Unchecked Warnings ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Β«Π·Π°Π³Ρ€ΡΠ·Π½Π΅Π½ΠΈΡŽ ΠΊΡƒΡ‡ΠΈΒ» ΠΈ ошибкам Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Reflection Π½Π΅ позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ссли ΠΎΠ½ Π½Π΅ Reifiable. Но Reflection позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ значСния, ΠΎ Ρ‚ΠΈΠΏΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΏΠΎΠ»Π΅ΠΉ класса.

Type Inference

Π’Π΅Ρ€ΠΌΠΈΠ½ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти ΠΊΠ°ΠΊ Β«Π’Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ°Β». Π­Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ компилятора ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ (Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ) Ρ‚ΠΈΠΏ ΠΈΠ· контСкста. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

Π‘ появлСниСм Π΄Π°ΠΉΠΌΠΎΠ½Π΄-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² Java 7 ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρƒ ArrayList :

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Ρƒ нас Π΅ΡΡ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт связный список:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° List.nil() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠΉ части:

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° компилятором ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° для Π²Ρ‹Π·ΠΎΠ²Π° List.nil() Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ String β€” это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² JDK 7, всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Выглядит Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Ρ‡Ρ‚ΠΎ компилятор Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вывСсти Ρ‚ΠΈΠΏ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° пСрСдаСтся Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ JDK 7 ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π±Ρ‹ compile-time error. А Π² JDK 8 скомпилируСтся. Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ пСрвая Ρ‡Π°ΡΡ‚ΡŒ JEP-101, Π΅Π³ΠΎ пСрвая Ρ†Π΅Π»ΡŒ β€” Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ЕдинствСнная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ это Π² вСрсиях Π΄ΠΎ JDK 8 β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ явный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Вторая Ρ‡Π°ΡΡ‚ΡŒ JEP-101 Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Но данная Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½Π° Π΄ΠΎ сих ΠΏΠΎΡ€, ΠΈ вряд Π»ΠΈ Π² блиТайшСС врСмя появится такая функция. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях JDK Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² этом исчСзнСт, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

ПослС Π²Ρ‹Ρ…ΠΎΠ΄Π° JEP 101 Π½Π° StackOverflow появилось мноТСство вопросов ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполнялся Π½Π° 7-ΠΉ вСрсии, Π½Π° 8-ΠΉ выполняСтся ΠΈΠ½Π°Ρ‡Π΅ – ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ компилируСтся? Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ послС компиляции Π½Π° JDK1.8:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ послС компиляции Π½Π° JDK1.7 – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Java 7:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Oracle выпустил руководство ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ с JDK1.7 Π½Π° JDK 1.8 Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ описаны ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Java, ΠΈ Ρ‚ΠΎ, ΠΊΠ°ΠΊ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ.

НапримСр Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ послС компиляции Π½Π° Java 8 всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π½Π° Java 7, сдСлайтС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ:

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

На этом ΠΌΠΎΠΉ рассказ ΠΎ Java Generics ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ источники, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π² освоСнии Ρ‚Π΅ΠΌΡ‹:

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

Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ (Java, ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ)

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

Π—Π° основу Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»Π° взята информация ΠΈΠ· 6-ΠΎΠΉ Π³Π»Π°Π²Ρ‹ ΠΊΠ½ΠΈΠ³ΠΈ Β«Oracle Certified Professional Java SE 7 Programmers Exams 1Z0-804 and 1Z0-805Β». Она Π±Ρ‹Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° (ΠΊΠΎΠ΅-Π³Π΄Π΅ ΠΎΠ±Ρ€Π΅Π·Π°Π½Π°, Π° ΠΊΠΎΠ΅-Π³Π΄Π΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Google ΠΈ Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ). Π—Π΄Π΅ΡΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС Π½ΡŽΠ°Π½ΡΡ‹ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² β€” для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ прочтСния.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ описанию Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· измСнСния ΠΈΡ… описания. Π’ Java, начиная с вСрсии J2SE 5.0, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ срСдства ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ программирования, синтаксичСски основанныС Π½Π° C++. НиТС Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ generics (Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ) ΠΈΠ»ΠΈ > β€” подмноТСство ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ программирования.

Допустим ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π΅ΠΌ ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°Ρ… ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцифичСский Π²Ρ‹Π²ΠΎΠ΄ Π½Π° консоль ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° (с использованиСм Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок).

НиТС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Π’ Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π±Ρ‹Π»Π° Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π° ошибка, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π° консоли ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° врСмя Π·Π°Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ± этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» с использованиСм Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² (ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ):

Π‘Π°ΠΌΠΎΠ΅ сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ (для мСня) Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ошибкС, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ скомпилируСтся:

Π”ΡƒΠΌΠ°ΡŽ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ согласятся, Ρ‡Ρ‚ΠΎ ошибка компиляции Β«Π»ΡƒΡ‡ΡˆΠ΅Β» ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Ρ‚.ΠΊ. чисто тСорСтичСски скомпилированный ΠΊΠΎΠ΄ с ошибкой ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΡƒΠ΄Π°, ΠΊΡƒΠ΄Π° Π΅ΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ‹ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ достоинство Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим конструкции, относящиСся ΠΊ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ скомпилировался, достаточно Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡŽ BoxPrinter:

ПослС ΠΈΠΌΠ΅Π½ΠΈ класса Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках » » ΡƒΠΊΠ°Π·Π°Π½ΠΎ имя Ρ‚ΠΈΠΏΠ° «Π’», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса. ЀактичСски Π’ – это Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΠΏΠΎΠ·ΠΆΠ΅ (ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса).

Π’Π½ΡƒΡ‚Ρ€ΠΈ класса ΠΏΠ΅Ρ€Π²ΠΎΠ΅ использованиС T Π² объявлСнии поля:

Π—Π΄Π΅ΡΡŒ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ пСрСмСнная Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠ° (generic type), Ρ‚.ΠΎ. Π΅Ρ‘ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ·ΠΆΠ΅, ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса BoxPrinter.

Π’ main()-ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС:

Π—Π΄Π΅ΡΡŒ указываСтся, Ρ‡Ρ‚ΠΎ Π’ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Integer. Π“Ρ€ΡƒΠ±ΠΎ говоря, для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° value1 всС поля Π’-Ρ‚ΠΈΠΏΠ° Π΅Π³ΠΎ класса BoxPrinter становятся полями Ρ‚ΠΈΠΏΠ° Integer (private Integer val;).
Π•Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ мСсто, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ T:

Как ΠΈ Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ val с Ρ‚ΠΈΠΏΠΎΠΌ Π’, Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для конструктора BoxPrinter ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ T. ПозТС Π² main()-ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ конструктор Π² new, указываСтся, Ρ‡Ρ‚ΠΎ Π’ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Integer:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π²Π½ΡƒΡ‚Ρ€ΠΈ конструктора BoxPrinter, arg ΠΈ val Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π° ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ T. НапримСр ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ конструктора:

ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ошибкС компиляции.

ПослСднСС мСсто использования Π’ Π² классС – ΠΌΠ΅Ρ‚ΠΎΠ΄ getValue():

Π’ΡƒΡ‚ Π²Ρ€ΠΎΠ΄Π΅ Ρ‚ΠΎΠΆΠ΅ всё ясно – этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π΄Π°Π½ ΠΏΡ€ΠΈ Π΅Π³ΠΎ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) создании.

ΠŸΡ€ΠΈ создании Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классов ΠΌΡ‹ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ лишь Ρ‚ΠΈΠΏΠΎΠΌ (Π’) – ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько:

НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ Π½Π° количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ:

Алмазный синтаксис (Diamond syntax)

ВСрнёмся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π°Π΄ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ со строкой ΠΊΠΎΠ΄Π°:

Если Ρ‚ΠΈΠΏΡ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ:

Π’ΠΎ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ компиляции:

НСмного Π»Π΅Π½ΠΈΠ²ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь программистам Π² Java 7 Π±Ρ‹Π» Π²Π²Π΅Π΄Ρ‘Π½ Π°Π»ΠΌΠ°Π·Π½Ρ‹ΠΉ синтаксис (diamond syntax), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ°. Π’.Π΅. ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ компилятору ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΈΠ΄ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ объявлСния:

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ ошибки связанныС с отсутствиСм «<>» ΠΏΡ€ΠΈ использовании Π°Π»ΠΌΠ°Π·Π½ΠΎΠ³ΠΎ синтаксиса

Π’ случаС с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΊΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ просто ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ компилятора, ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Pair являСтся Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠΎΠΌ ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°Π±Ρ‹Ρ‚Ρ‹ «<>» ΠΈΠ»ΠΈ явноС Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², компилятор рассматриваСт Π΅Π³ΠΎ Π² качСствС простого Ρ‚ΠΈΠΏΠ° (raw type) с Pair ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π₯отя Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π² Π΄Π°Π½Π½ΠΎΠΌ сСгмСнтС ΠΊΠΎΠ΄Π°, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС. Π—Π΄Π΅ΡΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ пояснСниС понятия простого Ρ‚ΠΈΠΏΠ°.

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

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Π²ΠΎΡ‚ этот:

По Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ выполнСния ΠΎΠ±Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹, Π½ΠΎ Ρƒ Π½ΠΈΡ… разная идСя. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ мСсто с простым Ρ‚ΠΈΠΏΠΎΠΌ, Π²ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ – с Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠΌ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сломаСм это Π΄Π΅Π»ΠΎ – Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π² ΠΎΠ±ΠΎΠΈΡ… случаях

Для простого Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния (java.lang.ClassCastException), Π° для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ – ΠΎΡˆΠΈΠ±ΠΊΡƒ компиляции. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° 2 самых ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Если Π² Π΄Π²ΡƒΡ… словах, Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании простых Ρ‚ΠΈΠΏΠΎΠ², Π²Ρ‹ тСряСтС прСимущСство бСзопасности Ρ‚ΠΈΠΏΠΎΠ², прСдоставляСмоС Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠ°ΠΌΠΈ.

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Generic methods)

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ классами (Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классами), ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Π² Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-классС. Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ. (НапримСр, Π΅ΡΡ‚ΡŒ многочислСнныС ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² классС java.util.Collections.)

Рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Нам Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ интСрСсно это:

» » Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΎ послС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов «public» ΠΈ «static», Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’Π°ΠΊΠΎΠ΅ объявлСниС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΎΡ‚ объявлСния ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… классов, Π³Π΄Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ указываСтся послС ΠΈΠΌΠ΅Π½ΠΈ класса. Π’Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ – Π² Ρ†ΠΈΠΊΠ»Π΅ всС элСмСнты списка ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (val). Ну ΠΈ Π² main()-ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ происходит Π²Ρ‹Π·ΠΎΠ² нашСго ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°:

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ здСсь Π½Π΅ Π·Π°Π΄Π°Π½ явно Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Для IntList – это Integer ΠΈ 100 Ρ‚ΠΎΠΆΠ΅ упаковываСтся Π² Integer. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ставит Π² соотвСтствиС Ρ‚ΠΈΠΏΡƒ Π’ – Integer.

А сСйчас вопрос – какая (-ΠΈΠ΅) ΠΈΠ· Π½ΠΈΠΆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Ρ… строк откомпилируСтся Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ?

ΠžΡ‚Π²Π΅Ρ‚ с пояснСниСм:
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, Ρ‚.ΠΊ. нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ интСрфСйса.
Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС ΠΌΡ‹ создаСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° ArrayList ΠΈ ссылку Π½Π° Π½Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ для ArrayList класса. И Ρ‚Π°ΠΌ, ΠΈ Ρ‚Π°ΠΌ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ – всё ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.
Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΈ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ошибка компиляции, Ρ‚.ΠΊ. Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ (связи наслСдования здСсь Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ).

УсловиС одинаковости Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊ-Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ совсСм Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ. Π’ частности Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ 3. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ это Π½Π΅ допускаСтся?

Π‘ΡƒΠ΄Π΅ΠΌ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ – допустим 3-ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. Рассмотрим Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

Wildcards (Маски)

БСйчас Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Wildcard Parameters (wildcards). Π­Ρ‚ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках пСрСводится ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: ΠΌΠ΅Ρ‚Π°ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, подстановочныС символы, Π³Ρ€ΡƒΠΏΠΏΠΎΠ²Ρ‹Π΅ символы, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, маски ΠΈ Ρ‚.Π΄. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ «ΠΌΠ°ΡΠΊΡƒ», просто ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΉ мСньшС букв…

Как Π±Ρ‹Π»ΠΎ написано Π²Ρ‹ΡˆΠ΅ Π²ΠΎΡ‚ такая строка ΠΊΠΎΠ΄Π° Π½Π΅ скомпилируСтся:

Но Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

Под маской ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ эту ΡˆΡ‚ΡƒΠΊΡƒ – » «.

А сСйчас ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ маску ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊ компиляции:

ΠœΠ΅Ρ‚ΠΎΠ΄ printList ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² сигнатурС использована маска:

И этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для списков с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Integer ΠΈ String).

Однако Π²ΠΎΡ‚ это Π½Π΅ скомпилируСтся:

И Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ малСнький ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΡƒΡ‚ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ компиляции. Однако Π½Π΅Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ пСрСмСнная numList Ρ…Ρ€Π°Π½ΠΈΡ‚ список со строками. Допустим Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Ρ…Ρ€Π°Π½ΠΈΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ списки чисСл. РСшСниС Π΅ΡΡ‚ΡŒ:

Π”Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π΅ скомпилируСтся, Π° всё ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ маски ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ numList ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылку Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° список, содСрТащий элСмСнты унаслСдованныС ΠΎΡ‚ Number, Π° всё ΠΈΠ·-Π·Π° объявлСния: List numList. Π’ΡƒΡ‚ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ маскС задаётся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ numList ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для списка с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ количСством Ρ‚ΠΈΠΏΠΎΠ². Double ΠΊΠ°ΠΊ ΠΈ Integer наслСдуСтся ΠΎΡ‚ Number, поэтому ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ скомпилируСтся.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ описано Π²Ρ‹ΡˆΠ΅ называСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ масками (Bounded wildcards). ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… конструкций ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма красивым ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Допустим Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сумму чисСл Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранятся Π² ΠΎΠ΄Π½ΠΎΠΌ спискС:

Double-Ρ‚ΠΈΠΏ Π±Ρ‹Π» использован для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ result Ρ‚.ΠΊ. ΠΎΠ½ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ взаимодСйствуСт с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ числовыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ (Ρ‚.Π΅. Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠΎΠ²).

На этом всС. НадСюсь, данная ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.

Если Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ, проголосуйтС Π·Π° Π½Π΅Π΅

Голосов: 175 Π“ΠΎΠ»ΠΎΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ количСство ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс java

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

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

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