Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

Вопросы для собСсСдования ΠΏΠΎ Java Generics (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Вопросы для собСсСдования ΠΏΠΎ систСмС Ρ‚ΠΈΠΏΠΎΠ² Java

β€’ Вопросы Π½Π° собСсСдовании ΠΏΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ Java (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Вопросы для собСсСдования ΠΏΠΎ структурС классов Java ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

β€’ Вопросы для собСсСдования ΠΏΠΎ Java 8 (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Java Вопросы Π½Π° собСсСдовании (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Вопросы Π½Π° собСсСдовании ΠΏΠΎ Java Generics (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹) (тСкущая ΡΡ‚Π°Ρ‚ΡŒΡ) β€’ Вопросы Π½Π° собСсСдовании ΠΏΠΎ Java Flow Control (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Вопросы Π½Π° собСсСдовании ΠΏΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌ Java (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ Вопросы для собСсСдования ΠΏΠΎ Java Annotations (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

β€’ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ вопросы Π½Π° собСсСдовании ΠΏΠΎ Spring Framework

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

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² вопросов ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° собСсСдованиС ΠΏΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ Java-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ.

2. Вопросы

Q1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с простого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±Π΅Π· Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ²:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ наш Ρ‚ΠΈΠΏ String Π½Π° ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π½Π°Π·ΠΎΠ²Π΅ΠΌ T. По соглашСнию ΠΎΠ½ Π½Π°Π·Π²Π°Π½ Ρ‚Π°ΠΊ:

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

Π’ этом случаС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ числа. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот Ρ‚ΠΈΠΏ Π½Π° всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ.

Q2. ΠšΠ°ΠΊΠΎΠ²Ρ‹ прСимущСства использования ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²?

Одним ΠΈΠ· прСимущСств использования ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² являСтся отсутствиС привСдСния Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с коллСкциями. ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это:

Π’ этом случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ClassCastException Π²ΠΎ врСмя выполнСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ†Π΅Π»ΠΎΠ΅ число Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΎ Π² String.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ сСбя, Π½Π° этот Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ:

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ° компиляции, которая ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ClassCastExceptions ΠΈ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ².

Q3. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ стираниС Ρ‚ΠΈΠΏΠ°?

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ стираниС ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ смоТСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎ врСмя выполнСния:

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСдставляСт собой псСвдокод, эквивалСнтный Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ всС ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π±Π΅Π· стирания Ρ‚ΠΈΠΏΠ°, Π½ΠΎ, ΠΊ соТалСнию, это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. И снова информация ΠΎΠ± ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ΅ нСдоступна Π²ΠΎ врСмя выполнСния.

Q4. Если ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΏΡ€ΠΈ создании экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ ΠΊΠΎΠ΄ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ?

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

НСсмотря Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ компиляции, всС ΠΆΠ΅ вСроятно, Ρ‡Ρ‚ΠΎ компилятор выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ тСряСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π²ΠΎ врСмя компиляции, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡ‚ использования Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ².

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ, хотя обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ стираниС Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹, это плохая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

Q5. Π§Π΅ΠΌ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ отличаСтся ΠΎΡ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°?

Π’ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° вводится Π² ΠΌΠ΅Ρ‚ΠΎΠ΄, находящийся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠœΡ‹ использовали статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ ΠΏΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ нСстатичСский. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ° (описанный Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ вопросС), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ любой ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, Π±Π΅Π· нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ это Π΄Π΅Π»Π°Π΅ΠΌ.

Q6. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠ°?

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Π½Π΅Ρ‚ нСобходимости Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ.

Q7. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°?

Π”ΠΎ сих ΠΏΠΎΡ€ всС наши вопросы касались Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ наши Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ любого Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ.

Когда ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅ΠΌ Ρ‚ΠΈΠΏΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш ΠΎΠ±Ρ‰ΠΈΠΉ Ρ‚ΠΈΠΏ всСгда Π±Ρ‹Π» подклассом ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ extends , ΠΌΡ‹ заставляСм T Π±Ρ‹Ρ‚ΡŒ подклассом animal . Π’ΠΎΠ³Π΄Π° Ρƒ нас ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠ° с кошками:

Но Ρƒ нас Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»Π΅Ρ‚ΠΊΠΈ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ являСтся подклассом ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ:

Одним ΠΈΠ· прСимущСств этого являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ компилятору доступны всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ animal. ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ наш Ρ‚ΠΈΠΏ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Π΅Π³ΠΎ, поэтому ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ наш ΠΌΠ΅Ρ‚ΠΎΠ΄ для Ρ€Π°Π·Π½Ρ‹Ρ… подклассов ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…:

Q8. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с нСсколькими ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ?

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ объявлСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π³Ρ€Π°Π½ΠΈΡ† для Π½Π°ΡˆΠΈΡ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π’ нашСм ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠ΄Π½Ρƒ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, Π½ΠΎ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ большС, Ссли Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ:

Q9. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ подстановочный Π·Π½Π°ΠΊ?

Q10. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ подстановочный Π·Π½Π°ΠΊ с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ свСрху?

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ класса Ρ„Π΅Ρ€ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, сначала Π±Π΅Π· подстановочного Π·Π½Π°ΠΊΠ°:

Если Π±Ρ‹ Ρƒ нас Π±Ρ‹Π»ΠΎ нСсколько подклассов ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… , Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ кошка ΠΈ собака , ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… всСх Π½Π° Π½Π°ΡˆΡƒ Ρ„Π΅Ρ€ΠΌΡƒ:

Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ компилятор ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° , Π° Π½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΅Π³ΠΎ подкласса.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²Π²Π΅Π΄Π΅ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ свСрху подстановочный Π·Π½Π°ΠΊ Π² наш ΠΌΠ΅Ρ‚ΠΎΠ΄ добавлСния ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π·, наш ΠΊΠΎΠ΄ скомпилируСтся. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ компилятору ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ любого ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠ° ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ΠΎ.

Q11. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ подстановочный Π·Π½Π°ΠΊ?

Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ подстановочного Π·Π½Π°ΠΊΠ° Π½Π΅ являСтся синонимом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ подстановочный Π·Π½Π°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любого Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° являСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ (ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ подклассом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ вторая строка Π½Π΅ компилируСтся, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ трСбуСтся список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π½Π΅ список строк. ΠŸΠ΅Ρ€Π²Π°Ρ строка компилируСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ допустим список любого нСизвСстного Ρ‚ΠΈΠΏΠ°.

Q12. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ подстановочный Π·Π½Π°ΠΊ с Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ΠΉ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ super, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ addDogs для списка ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

Π­Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ являСтся надклассом ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…. Если Π±Ρ‹ ΠΌΡ‹ Π½Π΅ использовали ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ снизу подстановочный Π·Π½Π°ΠΊ, ΠΊΠΎΠ΄ Π½Π΅ компилировался Π±Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ являСтся списком ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ….

Если ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, ΠΌΡ‹ Π½Π΅ смоТСм Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ собаку Π² список ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ подкласса ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ кошСк ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ собак. Волько супСркласс ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ…. НапримСр, это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ:

Q13. Когда Π²Ρ‹ Π±Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Ρ‚ΠΈΠΏ с Π½ΠΈΠΆΠ½ΠΈΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ с Π²Π΅Ρ€Ρ…Π½ΠΈΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ?

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

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стандартных интСрфСйсов ΠΈ классов Java.

Π’14. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ситуации, ΠΊΠΎΠ³Π΄Π° информация ΠΎΠ± ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ΅ доступна Π²ΠΎ врСмя выполнСния?

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

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ°:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ нСсколько Ρ…Ρ€ΡƒΠΏΠΊΠΈΠΉ. НапримСр, это зависит ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² нСпосрСдствСнном супСрклассС. Но ΠΎΠ½ дСмонстрируСт, Ρ‡Ρ‚ΠΎ JVM Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этом Ρ‚ΠΈΠΏΠ΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Β» Вопросы Π½Π° собСсСдовании ΠΏΠΎ Java Flow Control (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹) Β« ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ вопросы ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² Java (+ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹)

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

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

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

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

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

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

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

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

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

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

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

Wildcards

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² 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. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² 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 для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ…: синтаксис, Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ Π΄ΠΈΠΊΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

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

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

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

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Wildcards

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

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

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

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

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

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

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

Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎ Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΎΠ² java

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

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

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

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

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

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

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

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

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

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

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