Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «Ѐилософия Java3Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 93

Автор Π‘Ρ€ΡŽΡ ЭккСль

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ прСдупрСТдСния

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ instanceof с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ эффСкту. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ прСдставлСнии Π² Ρ„ΠΎΡ€ΠΌΠ΅ Object ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΊ Π’ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅:

//. generics/GenericCast.java

class FixedSizeStack<T> { private int index = 0; private Object[] storage; public FixedSizeStackOnt size) {

storage = new Object[size];

}

public void push(T item) { storage[index++] = item; }

@SuppressWarni ngs("unchecked")

public T popО { return (T)storage[--index], }

}

public class GenericCast {

public static final int SIZE = 10; public static void main(String[] args) { FixedSizeStack<String> strings =

new FixedSizeStack<String>(SIZE); for (String s β€’ "А Π’ Π‘ D E F G H I J".splitC' "))

strings.push(s), for(int i = 0. i < SIZE; i++) {

String s = strings pop(); System.out.print(s + " ");

} /* Output:

JIHGFEDCBA

*///:-

Π‘Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ @SuppressWarnings компилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ для Ρ€ΠΎΡ€() ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Β«Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈΒ». ВслСдствиС стирания ΠΎΠ½ Π½Π΅ Π·Π½Π°Π΅Ρ‚, бСзопасно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, поэтому ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€ΠΎΡ€() Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ прСобразования Π½Π΅ выполняСт. Π’ стираСтся Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ограничСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ являСтся Object, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€ΠΎΡ€() Π½Π° самом Π΄Π΅Π»Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Object Π² Object.

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ°

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ компилируСтся, хотя Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд выглядит Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ:

// generics/UseList java

// {CompileTimeError} (He компилируСтся)

import java.util.*;

public class UseList<W.T> { void f(List<T> v) {}

void f(List<W> v) {}

} III ~

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° создаСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΡƒΡŽ сигнатуру Ρ‚ΠΈΠΏΠ° вслСдствиС стирания. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ:

II. generics/UseList2 java

import java util.*;

public class UseList2<W.T> { void fl(List<T> v) {} void f2(List<W> v) {}

} III.-

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ компилятором.

РСзюмС

МнС довСлось Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с шаблонами Π‘++ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΡ… появлСния. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π΄Π°Π»Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ я Π²Ρ‹Π΄Π²ΠΈΠ³Π°Π» Π² спорах Ρ‡Π°Ρ‰Π΅, Ρ‡Π΅ΠΌ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΠΈΡ… Π΅Π΄ΠΈΠ½ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΎΠ². Π›ΠΈΡˆΡŒ Π½Π΅Π΄Π°Π²Π½ΠΎ я задумался Π½Π°Π΄ Ρ‚Π΅ΠΌ, насколько Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ справСдлив этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, β€” сколько Ρ€Π°Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ я сСйчас ΠΎΠΏΠΈΡˆΡƒ, ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ°Π»Π° Π² Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄?

АргумСнт Ρ‚Π°ΠΊΠΎΠΉ: ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… мСст для использования ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ классы: List, Set, Map ΠΈ Ρ‚. Π΄. Π”ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° Java SE5 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, прСобразовывался Π² Object, ΠΈ информация Ρ‚ΠΈΠΏΠ° Ρ‚Π΅Ρ€ΡΠ»Π°ΡΡŒ. Если ΠΆΠ΅ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ снова ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π΅Π³ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π― пояснял происходящСС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ List с элСмСнтами Cat (Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° с Apple ΠΈ Orange ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π½Π°Ρ‡Π°Π»Π΅ Π³Π»Π°Π²Ρ‹ 11). Π‘Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· Java SE5 Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Object, поэтому Π² List с элСмСнтами Cat Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Dog.

Однако вСрсии Java, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ Π΄ΠΎ появлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ допускали Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Если Π²Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π»ΠΈ Dog Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Cat, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС элСмСнты ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠ°ΠΊ Cat, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠΈ ссылки Π½Π° Dog ΠΈ Π΅Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊ Cat происходило ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ RuntimeException. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π»Π°ΡΡŒ, ΠΏΡƒΡΡ‚ΡŒ ΠΈ Π½Π° стадии выполнСния, Π° Π½Π΅ Π²ΠΎ врСмя компиляции.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… изданиях ΠΊΠ½ΠΈΠ³ΠΈ я писал:

Β«Π­Ρ‚ΠΎ Π½Π΅ просто мСлкая Π½Π΅ΠΏΡ€ΠΈΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Π° ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡƒΠ»ΠΎΠ²ΠΈΠΌΡ‹Ρ… ошибок. Если ΠΎΠ΄Π½Π° Ρ‡Π°ΡΡ‚ΡŒ (ΠΈΠ»ΠΈ нСсколько частСй) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ вставляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ обнаруТиваСтся, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±Ρ‹Π» ΠΉΠΎΠΌΠ΅Ρ‰Π΅Π½ нСдопустимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π²Π°ΠΌ придСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° нСвСрная опСрация вставки».

Но ΠΏΠΎΠ·ΠΆΠ΅ я задумался Π½Π°Π΄ этим Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΈ Ρƒ мСня появились сомнСния. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, насколько часто это происходит? НС помню, Ρ‡Ρ‚ΠΎΠ±Ρ‹ такая ошибка Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΠ»Π°ΡΡŒ Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Когда я ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π» людСй Π½Π° конфСрСнциях, ΠΌΠ½Π΅ Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π½ΠΈΠΊΠΎΠ³ΠΎ, с ΠΊΠ΅ΠΌ Π±Ρ‹ это ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ использовался ΠΏΡ€ΠΈΠΌΠ΅Ρ€ списка с ΠΈΠΌΠ΅Π½Π΅ΠΌ files, содСрТащСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ String, β€” Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ казалось Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° File, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, вСроятно, стоило ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ имя fileNames. ΠšΠ°ΠΊΡƒΡŽ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π½ΠΈ обСспСчивал язык Java, программист всС Ρ€Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ°Π»ΠΎΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ β€” Π° ΠΏΠ»ΠΎΡ…ΠΎ написанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π΄Π°ΠΆΠ΅ Ссли ΠΎΠ½Π° компилируСтся, всС Ρ€Π°Π²Π½ΠΎ остаСтся ΠΏΠ»ΠΎΡ…ΠΎ написанной. ВСроятно, Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ присвоит ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ понятноС имя Π²Ρ€ΠΎΠ΄Π΅ cats, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ послуТит ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ для программиста, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ занСсти Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ Cat. Но, Π΄Π°ΠΆΠ΅ Ссли это ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ такая ошибка останСтся скрытой? Π—Π΄Ρ€Π°Π²Ρ‹ΠΉ смысл подсказываСт, Ρ‡Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ вскорС послС Π½Π°Ρ‡Π°Π»Π° тСстирования с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Один Π°Π²Ρ‚ΠΎΡ€ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ такая ошибка ΠΌΠΎΠΆΠ΅Ρ‚ Β«ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ скрытой нСсколько Π»Π΅Ρ‚Β». Но я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ помню ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний ΠΎΡ‚ людСй, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с поиском ошибок Β«Dog Π² спискС CatΒ», ΠΈΠ»ΠΈ хотя Π±Ρ‹ с ΠΈΡ… частым появлСниСм. Π’Π°ΠΊ Π½Π΅ΡƒΠΆΠ΅Π»ΠΈ такая замСтная ΠΈ довольно слоТная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ парамСтризация, Π±Ρ‹Π»Π° Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Java ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π°?

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² язык (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅Π΅ Π² Java!) являСтся Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° Π½Π΅ созданиС Ρ‚ΠΈΠΏΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ΠΈΠΏΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ β€” всСго лишь ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт возмоТности создания ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, хотя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Β«Dog Π² спискС CatΒ» часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для оправдания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ спорСн.

Из-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ парамСтризация Π±Ρ‹Π»Π° «встроСна» Π² Java (Π° Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΊΠ°ΠΊ составная Ρ‡Π°ΡΡ‚ΡŒ языка с самого Π½Π°Ρ‡Π°Π»Π°), Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° взглянитС Π½Π° Map, особСнно Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ containsKey(Object key) ΠΈ get(Object key). Если Π±Ρ‹ эти классы ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² расчСтС Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π² этих ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… вмСсто Object использовались Π±Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹; Ρ‚Π΅ΠΌ самым ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π»ΠΈΡΡŒ Π±Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ стадии компиляции. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Π‘++ Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π° всСгда провСряСтся Π²ΠΎ врСмя компиляции.

БСсспорно, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ любого ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π±ΠΎΠ»Π΅Π΅ позднюю Π²Π΅Ρ€ΡΠΈΡŽ языка, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС, β€” ΠΊΡ€Π°ΠΉΠ½Π΅ хлопотная затСя. Π’ Π‘++ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ISO-Π²Π΅Ρ€ΡΠΈΡŽ языка, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ фактичСски всСгда являлись Π΅Π³ΠΎ составной Ρ‡Π°ΡΡ‚ΡŒΡŽ. Π’ Java парамСтризация Π±Ρ‹Π»Π° Π²Π²Π΅Π΄Π΅Π½Π° лишь спустя 10 Π»Π΅Ρ‚ послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ» Π½Π΅ΠΌΠ°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Π°Π» Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ влияниС Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ программисты ΡΡ‚Ρ€Π°Π΄Π°ΡŽΡ‚ ΠΈΠ·-Π·Π° близорукости, проявлСнной ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°ΠΌΠΈ языка ΠΏΡ€ΠΈ создании вСрсии 1.0. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈ создании исходной вСрсии ΠΎΠ½ΠΈ Π·Π½Π°Π»ΠΈ ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Π°Ρ… Π‘++ ΠΈ Π΄Π°ΠΆΠ΅ рассматривали Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΡ… Π² язык, Π½ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Ρ€Π΅ΡˆΠΈΠ»ΠΈ этого Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ (скорСС всСго, просто Ρ‚ΠΎΡ€ΠΎΠΏΠΈΠ»ΠΈΡΡŒ). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пострадал ΠΊΠ°ΠΊ язык, Ρ‚Π°ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Π½Π΅ΠΌ программисты. Волько врСмя ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Java отразится Π½Π° самом языкС.

ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π’ ΠΊΠΎΠ½Ρ†Π΅ Π³Π»Π°Π²Ρ‹ 5 Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ создаСт ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ массивы, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ· Π½ΠΈΡ… элСмСнты ΠΏΠΎ цСлочислСнным индСксам, Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ массива остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами этого Π²ΠΏΠΎΠ»Π½Π΅ достаточно, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° приходится Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ массива ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ этой Π³Π»Π°Π²Π΅ массивы Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ массивов

Π’ Java сущСствуСт Π½Π΅ΠΌΠ°Π»ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… способов хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ массивы Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ особоС мСсто?

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ показатСлям: ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, типизация ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ хранСния ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ². ΠœΠ°ΡΡΠΈΠ²Ρ‹ Java ΡΠ²Π»ΡΡŽΡ‚ΡΡ самым эффСктивным срСдством хранСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок9 Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Массив прСдставляСт собой ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, благодаря Ρ‡Π΅ΠΌΡƒ обращСния ΠΊ элСмСнтам ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ быстро. Π—Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ приходится Ρ€Π°ΡΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° массива фиксируСтся ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° протяТСнии Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² Π³Π»Π°Π²Π΅ 11, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ArrayList способСн автоматичСски Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство, выдСляя Π½ΠΎΠ²Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти ΠΈ пСрСмСщая Π² Π½Π΅Π³ΠΎ всС ссылки ΠΈΠ· старого. Π₯отя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ArrayList отдаСтся ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ массивами, Π·Π° Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ приходится Ρ€Π°ΡΠΏΠ»Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ, ΠΈ ArrayList Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступаСт ΠΏΠΎ эффСктивности ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ массиву.

И массивы, ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΎΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° происходит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ RuntimeException, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ± ошибкС программиста.

Π”ΠΎ появлСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌ классам ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π˜Π½Π°Ρ‡Π΅ говоря, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΊ Ρ‚ΠΈΠΏΡƒ Object, ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌΡƒ для всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов Π² Java. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ «старых» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ массив создаСтся для хранСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π½Π° стадии компиляции Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Java Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ нСподходящСС сообщСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π½Π° стадии компиляции ΠΈΠ»ΠΈ выполнСния, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов Π½Π΅ являСтся Π±ΠΎΠ»Π΅Π΅ рискованным ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ссли компилятор ΡƒΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈ сниТаСтся Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.