uz
Feedback
Java Geek

Java Geek

Kanalga Telegram’da oβ€˜tish

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹Π΅ совСты, Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠΈ ΠΈ ΠΊΠΎΠ΄ для Java-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ пост β€” Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ польза. Π£Ρ‡ΠΈΠΌ Java Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. По всСм вопросам @evgenycarter

Ko'proq ko'rsatish
2 380
Obunachilar
-124 soatlar
-127 kunlar
-3530 kunlar
Postlar arxiv
ЛСнивая инициализация Π±ΠΈΠ½ΠΎΠ² Π² Spring Boot 3. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ всС Π±ΠΈΠ½Ρ‹ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ Π½Π° стартС прилоТСния. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, особСнно Ссли Π΅ΡΡ‚ΡŒ тяТёлыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊ Π‘Π” ΠΈΠ»ΠΈ внСшним сСрвисам). πŸ“Œ Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»Π΅Π½ΠΈΠ²ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ всСх Π±ΠΈΠ½ΠΎΠ²:

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApplication.class);
        app.setLazyInitialization(true);
        app.run(args);
    }
}
Или Ρ‡Π΅Ρ€Π΅Π· application.properties:

spring.main.lazy-initialization=true
πŸ’‘ Π’ΠΎΠ³Π΄Π° Π±ΠΈΠ½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании, Π° Π½Π΅ ΠΏΡ€ΠΈ стартС. ⚠️ Когда стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: - Для ускорСния старта Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. - ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ β€” быстрСС Ρ€Π΅Π±ΠΈΠ»Π΄ ΠΈ пСрСзапуск. ⚠️ Когда Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ: - Π’ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ ошибки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. - Когда Π½ΡƒΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ старта ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния. 🧠 МоТно Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π»Π΅Π½ΠΈΠ²ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ:

@Component
@Lazy
public class HeavyService {
    // ΠŸΠΎΠ΄Π½ΠΈΠΌΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ понадобится
}
πŸ‘‰ @java_geek

Какими свойствами ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ΅ equals() ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ эквивалСнтности? β˜•οΈ Π Π΅Ρ„Π»Π΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: для любой ссылки Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x, x.equals(x) Π²Π΅Ρ€Π½Π΅Ρ‚ true; β˜•οΈ Π‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ: для Π»ΡŽΠ±Ρ‹Ρ… ссылок Π½Π° значСния x ΠΈ y, x.equals(y) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ true, Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° y.equals(x) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true. β˜•οΈ Π’Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ: для Π»ΡŽΠ±Ρ‹Ρ… ссылок Π½Π° значСния x, y ΠΈ z, Ссли x.equals(y) ΠΈ y.equals(z) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ true, Ρ‚ΠΎΠ³Π΄Π° ΠΈ x.equals(z) Π²Π΅Ρ€Π½Ρ‘Ρ‚ true; β˜•οΈ ΠΠ΅ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ: для Π»ΡŽΠ±Ρ‹Ρ… ссылок Π½Π° значСния Ρ… ΠΈ Ρƒ, Ссли нСсколько Ρ€Π°Π· Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ….equals(y), постоянно Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true Π»ΠΈΠ±ΠΎ постоянно Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ никакая информация, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΈ сравнСнии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π½Π΅ помСнялась. Для любой Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ссылки Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ….equals(null) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ false. πŸ‘‰ @java_geek

πŸš€ ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° Telegram ΠΊΠ°Π½Π°Π»ΠΎΠ² для программистов БистСмноС администрированиС, DevOps πŸ“Œ https://t.me/bash_srv Bash Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ https://t.me/win_sysadmin БистСмный Администратор Windows https://t.me/sysadmin_girl Π”Π΅Π²ΠΎΡ‡ΠΊΠ° Бисадмин https://t.me/srv_admin_linux АдминскиС ΡƒΠ³ΠΎΠ΄ΡŒΡ https://t.me/linux_srv Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Бисадмин https://t.me/devopslib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° дСвопса | DevOps, SRE, Sysadmin https://t.me/linux_odmin Linux: БистСмный администратор https://t.me/devops_star DevOps Star (Π—Π²Π΅Π·Π΄Π° ДСвопса) https://t.me/i_linux БистСмный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos БистСмный Администратор https://t.me/tipsysdmin Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Бисадмин (Ρ„ΠΎΡ‚ΠΎ ΠΆΠ΅Π»Π΅Π·Π°, Π±Ρ‹Π»ΠΎ/стало) https://t.me/sysadminof Книги для Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ https://t.me/i_odmin ВсС для систСмного администратора https://t.me/i_odmin_book Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° БистСмного Администратора https://t.me/i_odmin_chat Π§Π°Ρ‚ систСмных администраторов https://t.me/i_DevOps DevOps: ПишСм ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ€. https://t.me/sysadminoff Новости Линукс Linux 1C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/odin1C_rus CΡ‚Π°Ρ‚ΡŒΠΈ, курсы, совСты, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° 1Π‘ https://t.me/DevLab1C 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 https://t.me/razrab_1C 1C Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ https://t.me/buh1C_prog 1C ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ | БухгалтСрия ΠΈ Π£Ρ‡Ρ‘Ρ‚ https://t.me/rabota1C_rus Вакансии для программистов 1Π‘ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ C++πŸ“Œ https://t.me/cpp_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C/C++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Π£Ρ‡ΠΈΠΌ C/C++ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python πŸ“Œ https://t.me/pythonofff Python акадСмия. https://t.me/BookPython Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/python_real Python ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ Π½Π° русском ΠΈ английском https://t.me/python_360 Книги ΠΏΠΎ Python Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/BookJava Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/java_360 Книги ΠΏΠΎ Java Rus https://t.me/java_geek Π£Ρ‡ΠΈΠΌ Java Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… GitHub БообщСство πŸ“Œ https://t.me/Githublib Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Data Base) πŸ“Œ https://t.me/database_info ВсС ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: iOS, Android πŸ“Œ https://t.me/developer_mobila Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° https://t.me/kotlin_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΠΎ Kotlin Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/frontend_1 ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ для frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² https://t.me/frontend_sovet Frontend совСты, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°! https://t.me/React_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ React js ΠΈ всС Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ связано Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€ πŸ“Œ https://t.me/game_devv ВсС ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ³Ρ€ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ πŸ“Œ https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ https://t.me/proglb Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста https://t.me/bfbook Книги для программистов Π‘ΠΈΠ³Π”Π°Ρ‚Π°, машинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ πŸ“Œ https://t.me/bigdata_1 Big Data, Machine Learning ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ πŸ“Œ https://t.me/bookflow Π›Π΅ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ с IT ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ https://t.me/rust_lib ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Rust https://t.me/golang_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go (Golang) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/itmozg ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹, новости ΠΈΠ· ΠΌΠΈΡ€Π° IT https://t.me/php_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PHP программиста πŸ‘¨πŸΌβ€πŸ’»πŸ‘©β€πŸ’» https://t.me/nodejs_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ Node js ΠΈ всС Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ связано https://t.me/ruby_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ruby программиста https://t.me/lifeproger Π–ΠΈΠ·Π½ΡŒ программиста. Авторский ΠΊΠ°Π½Π°Π». QA, тСстированиС πŸ“Œ https://t.me/testlab_qa Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° тСстировщика Π¨ΡƒΡ‚ΠΊΠΈ программистов πŸ“Œ https://t.me/itumor Π¨ΡƒΡ‚ΠΊΠΈ программистов Π—Π°Ρ‰ΠΈΡ‚Π°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ πŸ“Œ https://t.me/thehaking Канал ΠΎ кибСрбСзопасности https://t.me/xakep_2 Π₯Π°ΠΊΠ΅Ρ€ Free Книги, ΡΡ‚Π°Ρ‚ΡŒΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² πŸ“Œ https://t.me/ux_web Π‘Ρ‚Π°Ρ‚ΡŒΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° πŸ“Œ https://t.me/Pomatematike Канал ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ https://t.me/phis_mat ΠžΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ https://t.me/matgeoru ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° | ГСомСтрия | Π›ΠΎΠ³ΠΈΠΊΠ° Excel Π»Π°ΠΉΡ„Ρ…Π°ΠΊπŸ“Œ https://t.me/Excel_lifehack https://t.me/mir_teh ΠœΠΈΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (Technology World) Вакансии πŸ“Œ https://t.me/sysadmin_rabota БистСмный Администратор https://t.me/progjob Вакансии Π² IT

🧠 ΠŸΡ€ΠΎΠΊΠ°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Spring Boot: ΠΊΠ°ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ лишниС Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ старт прилоТСния Spring Boot β€” мощная ΡˆΡ‚ΡƒΠΊΠ°, Π½ΠΎ Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ½Π½Ρƒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ. Π­Ρ‚ΠΎ влияСт Π½Π° врСмя старта, ΠΎΠ±ΡŠΡ‘ΠΌ памяти ΠΈ Π΄Π°ΠΆΠ΅ security. πŸ“Œ Как ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅? Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @SpringBootApplication(exclude = {...}) ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
    SecurityAutoConfiguration.class
})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
πŸ’‘ Подсказка: Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ подтягиваСтся β€” Π²ΠΊΠ»ΡŽΡ‡ΠΈ Π΄Π΅Π±Π°Π³ Π»ΠΎΠ³Π³Π΅Ρ€:

logging:
  level:
    org.springframework.boot.autoconfigure: DEBUG
Он ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹. ⚠️ НС ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°ΠΉ Π²ΡΠ»Π΅ΠΏΡƒΡŽ. НСкоторыС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Ρ‚Ρ‹ ΠΈΠΌΠΈ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. 🧰 ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ spring.factories ΠΈΠ»ΠΈ @EnableAutoConfiguration Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (Ρ‡Π°Ρ‰Π΅ β€” Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…). πŸ“ˆ Π˜Ρ‚ΠΎΠ³: Ρ‚ΠΎΡ‡Π΅Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Π°Π²Ρ‚ΠΎΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ = быстрСС, Π»Π΅Π³Ρ‡Π΅, бСзопаснСС. πŸ‘‰ @java_geek

Π’ Java ошибки NoClassDefFoundError ΠΈ NoSuchMethodError относятся ΠΊ runtime ошибкам, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΌ Π² процСссС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ связаны с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ совмСстимости, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ классов ΠΈ зависимости. ❗ NoClassDefFoundError πŸ’₯ ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°: JVM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π²ΠΎ врСмя выполнСния, хотя ΠΎΠ½ Π±Ρ‹Π» доступСн Π²ΠΎ врСмя компиляции. πŸ” ЧастыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹: 1. Класс отсутствуСт Π² classpath Π²ΠΎ врСмя запуска. - НапримСр, Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π½Π° этапС компиляции, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² JAR ΠΈΠ»ΠΈ отсутствуСт Π² runtime classpath. 2. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ класса (ExceptionInInitializerError). - Если статичСский Π±Π»ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ выбрасываСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, класс считаСтся Β«Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΒ». 3. Π Π°Π·Π½Ρ‹Π΅ classloaders. - Π’ особСнно слоТных систСмах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСрвлСты, Spring, OSGi), Ρ€Π°Π·Π½Ρ‹Π΅ classloader'Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ классы. 4. Π£Π΄Π°Π»Ρ‘Π½/ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ класс послС компиляции. ❗ NoSuchMethodError πŸ’₯ ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°: JVM Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ с ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ сигнатурой Π² классС Π²ΠΎ врСмя выполнСния. πŸ” ЧастыС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹: 1. ΠœΠ΅Ρ‚ΠΎΠ΄ сущСствуСт Π²ΠΎ врСмя компиляции, Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½ послС: - НапримСр, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Ρ‹Π»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π°, ΠΈ сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π° измСнилась. 2. ΠΠ΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ вСрсий Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ: - Одна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° компилируСтся с ΠΎΠ΄Π½ΠΎΠΉ вСрсиСй зависимости, Π° Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° другая вСрсия (Π±Π΅Π· Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°). 3. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² наслСдникС ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли структура ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов помСнялась ΠΌΠ΅ΠΆΠ΄Ρƒ компиляциСй ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. βœ… Как Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ classpath: - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ -verbose:class ΠΏΡ€ΠΈ запускС JVM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ классы. 2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ вСрсии зависимостСй: - Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ mvn dependency:tree ΠΈΠ»ΠΈ gradle dependencies ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹. 3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ jar-Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½ΡƒΠΆΠ½Ρ‹Ρ… классов/ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: - Π Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ jar: jar tf your-lib.jar - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сигнатуры ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ javap. 4. ИзбСгай Ρ‚Π΅Π½Π΅Π²Ρ‹Ρ… зависимостСй (shadow dependencies). 5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ dependency management: - НапримСр, Π² Maven Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСрсии зависимостСй Ρ‡Π΅Ρ€Π΅Π· <dependencyManagement>. πŸ‘‰ @java_geek

🧩 Π—Π°Ρ‡Π΅ΠΌ Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ EnumSet вмСсто Set<Enum>? БСгодня я ΠΏΠΎΠΊΠ°ΠΆΡƒ Π²Π°ΠΌ ΠΎΠ΄ΠΈΠ½ малСнький Ρ‚Ρ€ΡŽΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Π°ΡˆΡƒ Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Ρ€Π°Π·Ρ‹, Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с enum. Когда Π²Ρ‹ создаётС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ пСрСчислСния, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

Set<Day> days = new HashSet<>();
Но Π² Java Π΅ΡΡ‚ΡŒ спСциализированная рСализация β€” EnumSet, которая Π² дСсятки Ρ€Π°Π· быстрСС, потрСбляСт мСньшС памяти ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ отсутствиС null. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит:

EnumSet<Day> days = EnumSet.of(Day.MONDAY, Day.WEDNESDAY);
πŸ’‘ ΠŸΠΎΡ‡Π΅ΠΌΡƒ EnumSet Π»ΡƒΡ‡ΡˆΠ΅: - Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ битовая маска β€” супСрбыстро. - Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ мСньшС памяти, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ HashSet. - ВсС значСния Π² EnumSet Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ enum-Ρ‚ΠΈΠΏΠ° β€” мСньшС шансов ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ. - null Ρ‚ΡƒΠ΄Π° Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ β€” мСньшС Π±Π°Π³ΠΎΠ². πŸ“Œ ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY
}

EnumSet<Day> workDays = EnumSet.range(Day.MONDAY, Day.FRIDAY);
System.out.println(workDays); // [MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY]
Если Ρ‚Ρ‹ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ EnumSet, ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. ОсобСнно Π² пСрформанс-ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ… β€” это малСнькая оптимизация, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ. πŸ‘‰ @java_geek

ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° Telegram ΠΊΠ°Π½Π°Π»ΠΎΠ² для программистов https://t.me/bash_srv Bash Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ https://t.me/win_sysadmin БистСмный Администратор Windows https://t.me/lifeproger Π–ΠΈΠ·Π½ΡŒ программиста. Авторский ΠΊΠ°Π½Π°Π». https://t.me/devopslib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° дСвопса | DevOps, SRE, Sysadmin https://t.me/rabota1C_rus Вакансии для программистов 1Π‘ БистСмноС администрированиС πŸ“Œ https://t.me/sysadmin_girl Π”Π΅Π²ΠΎΡ‡ΠΊΠ° Бисадмин https://t.me/srv_admin_linux АдминскиС ΡƒΠ³ΠΎΠ΄ΡŒΡ https://t.me/linux_srv Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Бисадмин https://t.me/linux_odmin Linux: БистСмный администратор https://t.me/devops_star DevOps Star (Π—Π²Π΅Π·Π΄Π° ДСвопса) https://t.me/i_linux БистСмный администратор https://t.me/linuxchmod Linux https://t.me/sys_adminos БистСмный Администратор https://t.me/tipsysdmin Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Бисадмин (Ρ„ΠΎΡ‚ΠΎ ΠΆΠ΅Π»Π΅Π·Π°, Π±Ρ‹Π»ΠΎ/стало) https://t.me/sysadminof Книги для Π°Π΄ΠΌΠΈΠ½ΠΎΠ², ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ https://t.me/i_odmin ВсС для систСмного администратора https://t.me/i_odmin_book Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° БистСмного Администратора https://t.me/i_odmin_chat Π§Π°Ρ‚ систСмных администраторов https://t.me/i_DevOps DevOps: ПишСм ΠΎ Docker, Kubernetes ΠΈ Π΄Ρ€. https://t.me/sysadminoff Новости Линукс Linux 1C Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/odin1C_rus CΡ‚Π°Ρ‚ΡŒΠΈ, курсы, совСты, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΊΠΎΠ΄Π° 1Π‘ https://t.me/DevLab1C 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ 8 ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ C++πŸ“Œ https://t.me/cpp_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C/C++ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/cpp_knigi Книги для программистов C/C++ https://t.me/cpp_geek Π£Ρ‡ΠΈΠΌ C/C++ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Python πŸ“Œ https://t.me/pythonofff Python акадСмия. Π£Ρ‡ΠΈ Python быстро ΠΈ лСгко🐍 https://t.me/BookPython Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/python_real Python ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ Π½Π° русском ΠΈ английском https://t.me/python_360 Книги ΠΏΠΎ Python Rus Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/BookJava Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/java_360 Книги ΠΏΠΎ Java Rus https://t.me/java_geek Π£Ρ‡ΠΈΠΌ Java Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… GitHub БообщСство πŸ“Œ https://t.me/Githublib Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠ΅ ΠΈΠ· GitHub Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (Data Base) πŸ“Œ https://t.me/database_info ВсС ΠΏΡ€ΠΎ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: iOS, Android πŸ“Œ https://t.me/developer_mobila Мобильная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° https://t.me/kotlin_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΠΎ Kotlin Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° πŸ“Œ https://t.me/frontend_1 ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ для frontend Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² https://t.me/frontend_sovet Frontend совСты, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°! https://t.me/React_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ React js ΠΈ всС Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ связано Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€ πŸ“Œ https://t.me/game_devv ВсС ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ³Ρ€ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ πŸ“Œ https://t.me/book_for_dev Книги для программистов Rus https://t.me/programmist_of Книги ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ https://t.me/proglb Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста https://t.me/bfbook Книги для программистов https://t.me/books_reserv Книги для программистов Π‘ΠΈΠ³Π”Π°Ρ‚Π°, машинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ πŸ“Œ https://t.me/bigdata_1 Data Science, Big Data, Machine Learning, Deep Learning ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ πŸ“Œ https://t.me/bookflow Π›Π΅ΠΊΡ†ΠΈΠΈ, Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ, Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹ с IT ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ https://t.me/coddy_academy ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ совСты ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ https://t.me/rust_lib ΠŸΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Rust https://t.me/golang_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Go (Golang) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° https://t.me/itmozg ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹, новости ΠΈΠ· ΠΌΠΈΡ€Π° IT https://t.me/php_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° PHP программиста πŸ‘¨πŸΌβ€πŸ’»πŸ‘©β€πŸ’» https://t.me/nodejs_lib ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ ΠΏΠΎ Node js ΠΈ всС Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌ связано https://t.me/ruby_lib Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ruby программиста QA, тСстированиС πŸ“Œ https://t.me/testlab_qa Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° тСстировщика Π¨ΡƒΡ‚ΠΊΠΈ программистов πŸ“Œ https://t.me/itumor Π¨ΡƒΡ‚ΠΊΠΈ программистов Π—Π°Ρ‰ΠΈΡ‚Π°, Π²Π·Π»ΠΎΠΌ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ πŸ“Œ https://t.me/thehaking Канал ΠΎ кибСрбСзопасности https://t.me/xakep_2 Π₯Π°ΠΊΠ΅Ρ€ Free Книги, ΡΡ‚Π°Ρ‚ΡŒΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² πŸ“Œ https://t.me/ux_web Π‘Ρ‚Π°Ρ‚ΡŒΠΈ, ΠΊΠ½ΠΈΠ³ΠΈ для Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° πŸ“Œ https://t.me/Pomatematike Канал ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ https://t.me/phis_mat ΠžΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π€ΠΈΠ·ΠΈΠΊΠ΅ ΠΈ ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Excel Π»Π°ΠΉΡ„Ρ…Π°ΠΊπŸ“Œ https://t.me/Excel_lifehack https://t.me/tikon_1 Новости высоких Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π½Π°ΡƒΠΊΠΈ ΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈπŸ’‘ https://t.me/mir_teh ΠœΠΈΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (Technology World) Вакансии πŸ“Œ https://t.me/sysadmin_rabota БистСмный Администратор https://t.me/progjob Вакансии Π² IT

πŸ§ͺ Java: тСстируСм equals() ΠΈ hashCode() ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ БСгодня Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ нСбольшой, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ для всСх, ΠΊΡ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Java-ΠΊΠΎΠ΄: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ equals() ΠΈ hashCode(). Когда Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΡˆΡŒ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Entity ΠΈΠ»ΠΈ DTO), Π²Π°ΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρƒ ΠΈ Π½Π΅ подводят Π² коллСкциях. Π˜Π½Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΠΎΠ²ΠΈΡ‚ΡŒ Π±Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ. 🧰 Как это ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ EqualsVerifier β€” ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚ всю Π³Ρ€ΡΠ·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π·Π° нас:

import nl.jqno.equalsverifier.EqualsVerifier;

public class PersonTest {
    @Test
    void equalsContract() {
        EqualsVerifier.forClass(Person.class).verify();
    }
}
πŸ“Œ ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ: - Set, Map, List.contains() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ структуры ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². - EqualsVerifier ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚: ΡΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ, Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ, null ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. - Он Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚, Ссли Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ» final ΠΈΠ»ΠΈ Ссли ΠΏΠΎΠ»Π΅ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² сравнСниС. 🧠 Π‘ΠΎΠ²Π΅Ρ‚Ρ‹: - НС пиши equals() Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Objects.equals() ΠΈ Objects.hash(). - Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ Lombok, просто добавь @EqualsAndHashCode. Пиши Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ…, сталкивался Π»ΠΈ Ρ‚Ρ‹ с Π±Π°Π³Π°ΠΌΠΈ ΠΈΠ·-Π·Π° equals()`/`hashCode()? Как Ρ‚Ρ‹ ΠΈΡ… Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»? πŸ‘‰ @java_geek

πŸ“• ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Scala На ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ 1 апрСля Π² 20:00 мск ΠΌΡ‹ погрузимся Π² ΠΌΠΈΡ€ бэкСнд-Ρ€Π°Π·Ρ€
πŸ“• ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Scala На ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΡƒΡ€ΠΎΠΊΠ΅ 1 апрСля Π² 20:00 мск ΠΌΡ‹ погрузимся Π² ΠΌΠΈΡ€ бэкСнд-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Scala. πŸ“— Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹: β€” Π£Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ аспСкты создания соврСмСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Scala; β€” ΠŸΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с популярными Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ ΠΈ инструмСнтами для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…; β€” На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ создадитС простоС CRUD-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для закрСплСния Π½Π°Π²Ρ‹ΠΊΠΎΠ². Π‘ΠΏΠΈΠΊΠ΅Ρ€: АлСксСй Π’ΠΎΡ€ΠΎΠ½Π΅Ρ† β€” Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π΅ΠΏΠ°Ρ€Ρ‚Π°ΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ поисковых систСм Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Naumen, экспСрт с 14-Π»Π΅Ρ‚Π½ΠΈΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ Π½Π° Scala ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. πŸ‘‰ Π Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ прямо сСйчас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ мСроприятиС https://vk.cc/cKbrfD Π Π΅ΠΊΠ»Π°ΠΌΠ°. ООО Β«ΠžΡ‚ΡƒΡ ΠΎΠ½Π»Π°ΠΉΠ½-ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅Β», ΠžΠ“Π Π 1177746618576

🧩 Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Optional Π² Java ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ НЕ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ БСгодня Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· самых спорных классов Java β€” Optional. Часто Π²ΠΈΠΆΡƒ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ "Π½Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π΅", Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°ΡΡΡŒ, Π° вСдь Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ кСйсы примСнСния ΠΈ ограничСния. πŸ” Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Optional? 1. Π’ сигнатурах ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ:

   public Optional<User> findUserById(String id)
   
2. Для Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ:

   Optional.ofNullable(user)
       .map(User::getProfile)
       .map(Profile::getAddress)
       .ifPresent(System.out::println);
   
3. ВмСсто null ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ β€” это Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ бСзопасным. 🚫 Когда НЕ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Optional: - Π’ полях сущностСй ΠΈ DTO β€” Optional Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для хранСния состояния. - Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² β€” это Π»ΠΎΠΌΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ Π΄Π°Ρ‘Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹. - Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ²/Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² с частым Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ β€” Optional создаёт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° GC. - ΠŸΡ€ΠΈ сСриализации β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Jackson ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. πŸ’‘ Π›Π°ΠΉΡ„Ρ…Π°ΠΊ: Ссли Ρ‚Ρ‹ всё ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΡˆΡŒ Optional, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ orElse, orElseGet ΠΈ orElseThrow β€” Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ Π½ΡŽΠ°Π½ΡΡ‹, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… часто Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚. πŸ‘‰ @java_geek

🎯 Как я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Lombok ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ всё Π΅Ρ‰Ρ‘ Π½Π΅ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡΡŒ ΠΎΡ‚ Π½Π΅Π³ΠΎ БСгодня Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ ΠΊ Lombok. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ Π΄Π°Π²Π½ΠΎ ΠΈΠ΄ΡƒΡ‚ споры, я ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π΅Π³ΠΎ Π² рядС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” ΠΈ Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ. βœ… Π“Π΄Π΅ ΠΎΠ½ умСстСн - DTO, VO, Entity классы β€” здСсь Lombok ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (@Getter, @Setter, @ToString, @EqualsAndHashCode ΠΈ Ρ‚.Π΄.). - Π’ тСстах β€” аннотация @Builder ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ❗ Π“Π΄Π΅ избСгаю - Π’ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ΅. Π― ΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ явный ΠΊΠΎΠ΄ β€” особСнно Π² сСрвисах ΠΈ core-слоях. - Π’ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… API β€” особСнно Ссли Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°/ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. πŸ“Œ ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π”Π°, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Lombok Π½Π° record, Java 21+ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IDE-Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ. Но: - Lombok ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС шаблонов. - Π‘ Π½ΠΈΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ legacy-ΠΊΠΎΠ΄. - Иногда экономит часы Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… модСлях. πŸ’‘ Мой совСт: ΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ @Generated (ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ) Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создан Lombok, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‰Π΅ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΡƒΠ΄Π° Ρ‡Ρ‚ΠΎ взялось. А Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ большС контроля β€” ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ MapStruct + Ρ€ΡƒΡ‡Π½Ρ‹Π΅ ΠΌΠ°ΠΏΠΏΠ΅Ρ€Ρ‹. πŸ‘‰ @java_geek

КакиС подклассы класса Reader Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹? β€’ Reader β€” абстрактный класс, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π²Π²ΠΎΠ΄; β€’ BufferedReader β€” Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ; β€’ CharArrayReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· символьного массива; β€’ FileReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»; β€’ FilterReader β€” абстрактный класс, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ интСрфСйс для классов-надстроСк; β€’ InputStreamReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚Ρ‹ Π² символы; β€’ LineNumberReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ строки; β€’ PipedReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ°Π½Π°Π»; β€’ PushbackReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ символы ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΠΎΡ‚ΠΎΠΊ; β€’ StringReader β€” Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ· строки. πŸ‘‰ @java_geek

πŸ› οΈ Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ `Optional` Π² Java: ΠΊΠΎΠ³Π΄Π° стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Optional Π² Java β€” инструмСнтС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ NullPointerException ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ. Однако Π½Π΅ всС Ρ‚Π°ΠΊ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ, ΠΈ Ρƒ Optional Π΅ΡΡ‚ΡŒ свои Π½ΡŽΠ°Π½ΡΡ‹. πŸ”Ή Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Optional? βœ… Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Если ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ null, Π»ΡƒΡ‡ΡˆΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Optional<T>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ это. _ΠŸΡ€ΠΈΠΌΠ΅Ρ€:_

public Optional<String> findUsernameById(int id) {
    return id == 1 ? Optional.of("user123") : Optional.empty();
}
βœ… Когда Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΡˆΡŒ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (`Stream API`) ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡ Optional ΠΈ Stream, ΠΌΠΎΠΆΠ½ΠΎ элСгантно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ пустыС значСния. _ΠŸΡ€ΠΈΠΌΠ΅Ρ€:_

Optional<String> username = users.stream()
    .filter(user -> user.getId() == 1)
    .map(User::getUsername)
    .findFirst();
βœ… Когда Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π½ΠΎ Π½ΡƒΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ifPresent() для выполнСния дСйствий, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сущСствуСт. _ΠŸΡ€ΠΈΠΌΠ΅Ρ€:_

optionalUser.ifPresent(user -> System.out.println("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, " + user.getUsername()));
πŸ”» Когда Optional Π½Π΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ? ❌ Π’ полях сущностСй (DTO, Entity, POJO) Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Optional Π² полях ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈ нСэффСктивно. Π›ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ null ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ❌ Π’ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² НС стоит ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Optional Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π­Ρ‚ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚ прСимущСств ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ услоТняСт ΠΊΠΎΠ΄. _❌ Π’Π°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ:_

public void process(Optional<User> user) { ... }
_βœ… Π›ΡƒΡ‡ΡˆΠ΅:_

public void process(User user) { ... }
Π’Ρ‹Π²ΠΎΠ΄ πŸ“Œ βœ… Optional β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΈΠΌ Π»ΠΎΠ³ΠΈΠΊΡƒ. А ΠΊΠ°ΠΊ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Optional Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…? ΠŸΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях! πŸ‘‡ πŸ‘‰ @java_geek

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Java Virtual Machine (JVM)? Как ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Java Virtual Machine (JVM) β€” это срСда выполнСния, которая позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Java-прилоТСния Π½Π° любой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π³Π΄Π΅ установлСна JVM. Она являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Java, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ обСспСчиваСт ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Java-ΠΊΠΎΠ΄Π° ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. JVM ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ скомпилированный Java-ΠΊΠΎΠ΄ (Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄) ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Он выполняСт мноТСство Π·Π°Π΄Π°Ρ‡, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ классов, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΈ Ρ‚. Π΄. Когда Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выполняСтся Π½Π° JVM, ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Π±ΠΎΠ³Π°Ρ‚ΠΎΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Java, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ мноТСство Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Благодаря JVM Java считаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков программирования. πŸ‘‰ @java_geek

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ имя класса Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°? ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² .java Ρ„Π°ΠΉΠ»Π΅ Π±Ρ‹Π» Π½Π΅ большС Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ класс Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ совпадало с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π°. ВсС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°. Protected ΠΈ private классов Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π° Π²ΠΎΡ‚ Π½Π° package-protected это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ распространяСтся. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ класс Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любоС имя. Π’Π°ΠΊΠΆΠ΅ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ рядом с основным ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ классом Ρ„Π°ΠΉΠ»Π° (ΠΈΠ»ΠΈ вмСсто Π½Π΅Π³ΠΎ) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ любоС количСство Π΄Ρ€ΡƒΠ³ΠΈΡ… классов Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа, с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Они Π±ΡƒΠ΄ΡƒΡ‚ доступны Π²Π½ΡƒΡ‚Ρ€ΠΈ всСго ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ β€” ΠΌΠΎΠΆΠ΅Ρ‚. πŸ‘‰ @java_geek

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π°? Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ комбинация ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ списка Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅. Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². Π”Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ имя, Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ сигнатуры. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа. πŸ‘‰ @java_geek

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½? ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½ β€” Π΄Π°. Всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ β€” 2 статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ имя, Ссли количСство ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠΎΠ² различаСтся. ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ β€” Π½Π΅Ρ‚. Π’Ρ‹Π±ΠΎΡ€ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° происходит ΠΏΡ€ΠΈ Ρ€Π°Π½Π½Π΅ΠΌ связывании (Π½Π° этапС компиляции, Π° Π½Π΅ выполнСния) ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, хотя синтаксичСски ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ статичСского ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это Π²ΠΏΠΎΠ»Π½Π΅ коррСктная языковая конструкция. Π’ Ρ†Π΅Π»ΠΎΠΌ, ΠΊ статичСским полям ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ рСкомСндуСтся ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· имя класса, Π° Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. πŸ‘‰ @java_geek

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ класс Object? КакиС Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹? Object β€” это Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс для всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² Java. Π›ΡŽΠ±ΠΎΠΉ класс наслСдуСтся ΠΎΡ‚ Object ΠΈ, соотвСтствСнно, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹: public boolean equals(Object obj) β€” слуТит для сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ; int hashCode() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ hash ΠΊΠΎΠ΄ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; String toString() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строковоС прСдставлСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; Class getClass() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎ врСмя выполнСния; protected Object clone() β€” создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ копию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; void notify() β€” возобновляСт ΠΏΠΎΡ‚ΠΎΠΊ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€; void notifyAll() β€” возобновляСт всС ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€; void wait() β€” остановка Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ notify() ΠΈΠ»ΠΈ notifyAll() для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; void wait(long timeout) β€” остановка Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ врСмя ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ notify() ΠΈΠ»ΠΈ notifyAll() для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; void wait(long timeout, int nanos) β€” остановка Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ врСмя ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ notify() ΠΈΠ»ΠΈ notifyAll() для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; protected void finalize() β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ сборщиком мусора Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ удалСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ сборкС мусора. πŸ‘‰ @java_geek

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Β«ΡƒΡΡ‹ΠΏΠΈΡ‚ΡŒΒ» ΠΏΠΎΡ‚ΠΎΠΊ? Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΡ€ΠΈΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π²Ρ‹Π·Π²Π°Π² Π² Ρ…ΠΎΠ΄Π΅ Π΅Π³ΠΎ выполнСния статичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ Thread.sleep() ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² миллисСкундах. Π”ΠΎ истСчСния этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π²Π΅Π΄Π΅Π½ ΠΈΠ· состояния оТидания Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ interrupt() с выбрасываниСм InterruptedException. πŸ‘‰ @java_geek

Как устроСн HashMap? HashMap состоит ΠΈΠ· Β«ΠΊΠΎΡ€Π·ΠΈΠ½Β» (bucket). Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Β«ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹Β» β€” это элСмСнты массива, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ хранят ссылки Π½Π° списки элСмСнтов. ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β» вычисляСт Ρ…ΡΡˆ-ΠΊΠΎΠ΄ ΠΊΠ»ΡŽΡ‡Π°, Π½Π° основании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вычисляСтся Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ (Π½ΠΎΠΌΠ΅Ρ€ ячСйки массива), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт. Если ΠΊΠΎΡ€Π·ΠΈΠ½Π° пустая, Ρ‚ΠΎ Π² Π½Π΅Π΅ сохраняСтся ссылка Π½Π° вновь добавляСмый элСмСнт, Ссли ΠΆΠ΅ Ρ‚Π°ΠΌ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ элСмСнт, Ρ‚ΠΎ происходит ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΏΠΎ ссылкам ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтами Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅, Π² поисках послСднСго элСмСнта, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ ставится ссылка Π½Π° вновь Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт. Если Π² спискС Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ элСмСнт с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Ρ‚ΠΎ ΠΎΠ½ замСняСтся. πŸ‘‰ @java_geek

Java Geek - Telegram kanali @java_geek statistikasi va tahlili