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

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

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

ΠœΡ‹ Π½Π° Π±ΠΈΡ€ΠΆΠ΅: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² консоль?
πŸ‘8
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² консоль?
Anonymous Quiz
34%
falsetruetrue
34%
falsefalsetrue
19%
falsefalsefalse
13%
truetruetrue
πŸ‘25
Какими коллСкциями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ
Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Π²Π°Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΅Π΅ Ρ‚ΠΈΠΏΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Collections.synchronized*(). Π‘Π°ΠΌΡ‹ΠΉ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΈ самый ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ способ, создаСт ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ с синхронизациСй всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ synchronized.

Если Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ состоит Π² основном ΠΈΠ· чтСния, Π»ΡƒΡ‡ΡˆΠ°Ρ Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° – CopyOnWriteArrayList, ΠΈ содСрТащий Π΅Π³ΠΎ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ CopyOnWriteArraySet. ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ достигаСтся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ массива ΠΏΡ€ΠΈ любой ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ массив остаСтся immutable. Program order достигаСтся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ volatile Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ массивС.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – использованиС Concurrent-ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ:
β€’ ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ConcurrentSkipListMap, ConcurrentHashMap ΠΈ ConcurrentSkipListSet (Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π° Π² основС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ)
β€’ ΠΠ΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ConcurrentLinkedQueue ΠΈ ConcurrentLinkedDeque
β€’ Π‘ΠΎΠ»ΡŒΡˆΠΎΠΉ Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ
πŸ‘11
Какая ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… проинициализируСтся быстрСС всСх?
πŸ‘11
Какая ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… проинициализируСтся быстрСС всСх?
Anonymous Quiz
34%
a
10%
b и с
9%
c ΠΈ d
47%
b
πŸ‘13πŸ₯±7β˜ƒ3πŸ€”3
МоТно Π»ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ null Π² стандартных коллСкциях?

ВсС интСрфСйсы Collections Framework ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ своим рСализациям ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π»ΠΈ null-значСния. Если рСализация Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ null, ΠΎΠ½Π° выбрасываСт NullPointerException ΠΈΠ»ΠΈ ClassCastException.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ списков (LinkedList, ArrayList) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ null Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ (Queue ΠΈ Deque) Π½Π΅ хранят null – возвращая ΠΈΠ· Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° null ΠΎΠ½ΠΈ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎ пустотС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

Unmodifiable Maps Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ null-ΠΎΠ² совсСм. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ измСняСмыС ΠΌΠ°ΠΏΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ трудности со значСниями null. А Π²ΠΎΡ‚ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π΄Π΅Π»ΠΎ обстоит интСрСснСС.

HashMap Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ hash-сумму ΠΎΡ‚ null. Но вмСсто этого для Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π°ΠΊΠ΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ 0.

Иногда этот вопрос даСтся ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Π° с ΠΏΠΎΠ΄Π²ΠΎΡ…ΠΎΠΌ ΠΏΡ€ΠΎ TreeMap. Nullability Π΅Ρ‘ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ зависит ΠΎΡ‚ готовности ΠΊ этому ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π°. ΠΠ°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ порядок (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для Comparable ΠΊΠ»ΡŽΡ‡Π΅ΠΉ) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ null. РаньшС Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»
Π±Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволял ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ null Π² ΠΊΠΎΡ€Π΅Π½ΡŒ Π΄Π΅Ρ€Π΅Π²Π° Π±Π΅Π· выброса ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Set-ΠΎΠ² Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Ρ‡Ρ‚ΠΎ для ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Π² основС ΠΈΡ… Map-ΠΎΠ².
πŸ‘29
КакиС Π΅ΡΡ‚ΡŒ прСимущСства Ρƒ массива ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ?

Для хранСния ссылочных Ρ‚ΠΈΠΏΠΎΠ² массив ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ…ΡƒΠΆΠ΅ Ρ‡Π΅ΠΌ ArrayList. Π’ основС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π»Π΅ΠΆΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ массив, поэтому ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠΉ ΠΆΠ΅ самой. Однако, Π²Π°ΠΌ придСтся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ управлСния Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ массива ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. А Π·Π½Π°Ρ‡ΠΈΡ‚, Π±ΡƒΠ΄Π΅Ρ‚ большС шансов Π½Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ.

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы вмСсто ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ для ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΏΠΎ эффСктивности. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ – generic-Ρ‚ΠΈΠΏΡ‹, ΠΈΠ·-Π·Π° этого простыС значСния хранятся Π² Π½ΠΈΡ… Π² Ρ„ΠΎΡ€ΠΌΠ΅ ссылочных Ρ‚ΠΈΠΏΠΎΠ²-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ.

1. Autoboxing выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, это дорогая опСрация;
2. ΠšΡ€ΠΎΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Object Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ;
3. Π―Ρ‡Π΅ΠΉΠΊΠΈ массива Π»Π΅ΠΆΠ°Ρ‚ Π±Π»ΠΈΠ·ΠΊΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, это ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡˆΠ°Π½ΡΡ‹ попадания Π² кэш процСссора.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, для массива всё Ρ‚Π°ΠΊ ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ большС ΠΊΠΎΠ΄Π°, ΠΎΠ½ слоТнСС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π°ΠΌΠ΅Π½Π° листов Π½Π° массивы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ считаСтся излишнСй ΠΌΠΈΠΊΡ€ΠΎΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.
πŸ‘27
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘8😱1
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
4%
I'm a Daddy
67%
It's me!
11%
I'm a Grandpa
19%
НичСго Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ
πŸ€”27🀯10πŸ‘9πŸ₯΄3🀨1
Как ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ?

for/while
. ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ способ: цСлочислСнная пСрСмСнная-индСкс, которая увСличиваСтся ΠΎΡ‚ 0 Π΄ΠΎ size(). МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π½Π΅ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π°, с нСстандартным шагом. ΠŸΠ»Π°Ρ‚Π° Π·Π° это – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ Π² индСксах ΠΈ ΠΌΠ΅Π½Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Iterator. ООП-способ: ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ iterator() ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ next() ΠΏΠΎΠΊΠ° hasNext() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°, такая ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽΒ» ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² сторонний ΠΊΠΎΠ΄, Π½Π΅ отдавая саму ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Всё Π΅Ρ‰Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

for Iterable. БинтаксичСский сахар для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ синтаксис ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ΅Π½ просто ΠΎΠ±Ρ…ΠΎΠ΄. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ явного использования ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты Π² процСссС.

Π‘Ρ‚Ρ€ΠΈΠΌΡ‹. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ стрим ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с элСмСнтами Π² Π½Ρ‘ΠΌ. ΠšΡ€ΠΎΠΌΠ΅ простого forEach(), ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСй ΠΌΠΎΡ‰ΡŒΡŽ Java Steam API – Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты. Π—Π° это ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ лишниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° синтаксис Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ развСсистый.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Java 8. Π‘ этой вСрсии появились ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ срСдства для ΠΎΠ±Ρ…ΠΎΠ΄Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строк. Π£ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΈ Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† добавились ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ forEach для ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΈ replaceAll для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Как со стримами, ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Π½ΠΎ Π±Π΅Π· ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ создания стримов. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ простыС ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ for.
πŸ‘24πŸ”₯6
ΠšΠ°ΠΊΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ List Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π½Π°Π±ΠΎΡ€Π° элСмСнтов, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ часто происходит вставка ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов (ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅)?
Anonymous Quiz
35%
ArrayList
6%
Π›ΡŽΠ±ΠΎΠΉ, ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° опСрациях вставки-удалСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°
58%
LinkedList
1%
Vector
πŸ‘19πŸ₯΄16πŸ₯±3😐3
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ fail-fast ΠΈ fail-safe ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹?

Π­Ρ‚ΠΎ Π½Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π° характСристики Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ интСрфСйса Iterator. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Π΄Π΅Ρ‚ сСбя ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Fail-fast – «быстрый» ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. Когда послС Π΅Π³ΠΎ создания коллСкция ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ измСнилась, ΠΎΠ½ ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибкой Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π². Π’Π°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ класса ArrayList, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ½ выбрасываСт ConcurrentModificationException. РСкомСндуСтся Π½Π΅ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° fail-fast ΠΎΡ‚ΠΊΠ°Π·Π°Ρ…, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ошибки Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Fail-safe – Β«ΡƒΠΌΠ½Ρ‹ΠΉΒ» ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ»Π°Ρ‚Π° Π·Π° ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ – возмоТная Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… («слабая ΠΊΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΒ»). Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ класса ConcurrentHashMap Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΊΠΎΠΏΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ Π½Π΅ выбросит ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ свСТих ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠŸΠ»Π°Ρ‚Π° Π·Π° отсутствиС ошибок Π΄Ρ€ΡƒΠ³ΠΈΡ… fail-safe ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π΄Π΅Ρ‚Π°Π»ΠΈ всСгда ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.
πŸ‘30
Π§Π΅ΠΌ отличаСтся interface ΠΎΡ‚ @⁠interface?

Π‘Ρ€Π΅Π΄ΠΈ интСрфСйсов выдСляСтся особая Π³Ρ€ΡƒΠΏΠΏΠ°, которая Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ интСрфСйса – Serializable. Π’Π°ΠΊΠΈΠ΅ интСрфСйсы Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ классу Π½Π΅ΠΊΡƒΡŽ сСмантику, которая ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСфлСксии (ΠΈ instanceof), Π»ΠΈΠ±ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ, Π° ΠΊΠ°ΠΊ информация для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹Π΅ интСрфСйсы. ΠœΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс прСдставляСт ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ класса.

Начиная с Java 1.5 Π² языкС появился Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ Ρ‚ΠΈΠΏΠΎΠ² – Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Они Π±Π΅Ρ€ΡƒΡ‚ Π½Π° сСбя ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ возмоТности ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½ΠΎΠ³ΠΎ интСрфСйса:
1. МоТно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ классу ΠΈΠ»ΠΈ интСрфСйсу, Π½ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ, ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ, ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список прСдставлСн Π² пСрСчислСнии ElementType;
2. Аннотация ΠΌΠΎΠΆΠ΅Ρ‚ нСсти Π΄Π°Π½Π½Ρ‹Π΅ Π² своих элСмСнтах
3. Аннотация ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡΡ‚Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходникС, Π½Π΅ ΠΏΠΎΠΏΠ°Π² Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ вовсС. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ΡΡ Π΅Π΅ RetentionPolicy;
4. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ Π½Π΅ наслСдуСмой, просто Π½Π΅ помСчая Π΅Π΅
@Inherited;
5. И ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, синтаксис. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π½Π°Ρ аннотация с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда отличаСтся ΠΎΡ‚ настоящих интСрфСйсов.

Joshua Block Π²
Π³Π»Π°Π²Π΅ 37 Effective Java выдСляСт Π΄Π²Π° прСимущСства ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹Ρ… интСрфСйсов ΠΏΠ΅Ρ€Π΅Π΄ аннотациями Π½Π° этапС компиляции:
1. МоТно Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ использованиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ°Ρ€ΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π½Ρ‹ΠΉ интСрфСйс – это Π΅Ρ‰Π΅ ΠΈ Ρ‚ΠΈΠΏ;
2. МоТно ΡΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ, сдСлав интСрфСйс ΠΈΡ… наслСдником.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ вопросу, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово
@interface ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, interface – интСрфСйс.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ компиляции Π² .class-Ρ„Π°ΠΉΠ»Π΅ аннотация прСвращаСтся Π² интСрфСйс-наслСдник java.lang.annotation.Annotation, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Π»Π°Π³ΠΎΠΌ ACC_ANNOTATION. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π­Ρ‚ΠΈΠΌ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ синтаксис объявлСния. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½Ρ‹Π΅ для Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ описаны Π²
JVMS 4.7.16-4.7.22.

К слову, конструкции Π²ΠΈΠ΄Π°
@something Π² javadoc Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ тэгами. Они выглядят ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ тСхничСски Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ с Π½ΠΈΠΌΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ.
πŸ‘25
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
πŸ‘12
Π§Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄?
Anonymous Quiz
20%
000111222
18%
012012012
2%
010120212
60%
ВсС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅
πŸ‘22🌚4
Для Ρ‡Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ?

Π£Π΄ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ случаи примСнСния Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΡ… свойства RetentionPolicy:

SOURCE – аннотация присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходном ΠΊΠΎΠ΄Π΅, Π½ΠΎ Π½Π΅ Π²ΠΎΠ²Π»Π΅Ρ‡Π΅Π½Π° Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ. МоТно Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° Π΄Π²Π΅ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ:

ΠŸΠ΅Ρ€Π²Π°Ρ – Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для программиста, Π° Π½Π΅ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π­Ρ‚ΠΎ всСвозмоТныС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹. Они Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ элСмСнтам Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ сСмантику. Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ –
@Immutable ΠΈ @ThreadSafe ΠΈΠ· Hibernate.

Вторая катСгория – инструкции для инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ этой ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ,
@SuppressWarnings ΠΈ @Override ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° прСдупрСТдСния ΠΈ ошибки компиляции. IntelliJ IDEA ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ @Nullable ΠΈ @NonNull ΠΈΠ· Spring Framework, ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… NullPointerException.

CLASS – самоС экзотичСскоС, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ стандартноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Аннотация ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ .class-Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ игнорируСтся Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠΎΠΌ классов. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ такая аннотация нСдоступна для Ρ€Π΅Ρ„Π»Π΅ΠΊΡˆΠ½Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для сторонних инструмСнтов, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для обфускаторов.

RUNTIME – самоС Ρ…ΠΎΠ΄ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ЦСль снабТаСтся ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, доступной Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘Π°ΠΌΠ° ΠΏΠΎ сСбС аннотация всё Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅ добавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ повСдСния. Для практичСской ΠΏΠΎΠ»ΡŒΠ·Ρ‹ runtime-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ исполнСн Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ процСссинга, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ инструмСнтами Reflection API. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΠΎ мноТСствС популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ²: Spring, Hibernate, Jackson.
πŸ‘22🌭1
МоТно Π»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ?

МоТно ΠΏΠΎΠ½ΡΡ‚ΡŒ этот вопрос ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Если имССтся Π² Π²ΠΈΠ΄Ρƒ, пСрСдаСтся Π»ΠΈ аннотация класса-родитСля классу-наслСднику, ΠΎΡ‚Π²Π΅Ρ‚ – ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅Ρ‚. Но наслСдованиС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, Ссли Π½Π° объявлСнии Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Inherited. Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для классов, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ смысл вопроса – наслСдованиС самих Ρ‚ΠΈΠΏΠΎΠ²-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Аннотация, ΠΊΠ°ΠΊ класс ΠΈΠ»ΠΈ интСрфСйс прСдставляСтся Π² систСмС ссылочным Ρ‚ΠΈΠΏΠΎΠΌ, ΠΎΠ½Π° Ρ‚ΠΎΠΆΠ΅ компилируСтся Π² .class-Ρ„Π°ΠΉΠ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ‚ΠΈΠΏΠΎΠΌ, скаТСм, java.lang.Override.

Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ссылочных Ρ‚ΠΈΠΏΠΎΠ², объявлСниС Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (
@interface) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ сСкций extends ΠΈΠ»ΠΈ implements. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ просто Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ систСму Ρ‚ΠΈΠΏΠΎΠ². Π’ скомпилированном ΠΊΠΎΠ΄Π΅ всС Ρ‚ΠΈΠΏΡ‹-Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ – это интСрфСйсы, унаслСдованныС ΠΎΡ‚ Annotation.
πŸ‘22
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
πŸ‘8❀2πŸ₯΄1
Какой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°?
Anonymous Quiz
41%
A is equal to Infinity
24%
A is equal to NaN
19%
ΠžΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ
17%
ΠžΡˆΠΈΠ±ΠΊΡƒ компиляции
πŸ‘21πŸ₯΄2⚑1πŸ”₯1πŸ€”1
МоТно Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ элСмСнту нСсколько ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ?

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСльзя. Π”ΠΎ Java 8 Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π² Π½Π΅ΠΉ Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΠΏΠ΅Ρ€Ρ‚ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ массив ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π² этот ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (см. Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅).

Начиная с Java 8 Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΌΠ΅Ρ‚Π°-аннотация
@Repeatable.
ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π΅Π΅ дСйствия Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅: помСчая Π΅ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΡƒΡŽ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ
@Repeatable Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НововвСдСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² синтаксисС использования: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°Π±ΠΎΡ€ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ оборачиваСтся Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ нСявно.

Π‘ΠΎ стороны Reflection ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚Π°-ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ явно – ΠΌΠ΅Ρ‚ΠΎΠ΄ getAnnotationsByType ΠΏΡ€ΠΈ нСобходимости Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅Ρ‚ этот ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.
πŸ‘11πŸ”₯1