рд▓реЛрдореНрдмреЛрдХ рдЬрд╛рд╡рд╛ рдХреА рдорд╣рд╛рдирддрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ



рд╣рдо Grubhub рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реЗ рдмреИрдХрдПрдВрдб рдореЗрдВ Java рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рд┐рджреНрдз рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкрд┐рдЫрд▓реЗ 20 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЕрдкрдиреА рдЧрддрд┐ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕рд╛рдмрд┐рдд рдХреА рд╣реИред рд▓реЗрдХрд┐рди рдЗрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, "рдмреВрдврд╝реЗ рдЖрджрдореА" рдХреА рдЙрдореНрд░ рдЕрднреА рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдиреЗ рд▓рдЧреА рдереАред

рдЬрд╛рд╡рд╛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЗрд╡реАрдПрдо рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ , рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдирд╣реАрдВред рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рд╡рд╣ рд╕реНрдХрд╛рд▓рд╛, рдХреНрд▓реЛрдЬрд░ рдФрд░ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡реЗ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЬреЗрд╡реАрдПрдо рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдпреЗ рдирд╡рд╛рдЪрд╛рд░ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдмрдиреЗ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛ 8 (рд╡рд▓реНрд▓рд╛рд╣, рд╕реНрдерд╛рдиреАрдп-рд╡реИрд░рд┐рдПрдмрд▓ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕, рд▓реВрдо) рдореЗрдВ рдЫрд╣ рдорд╣реАрдиреЗ рдХреА рд░рд┐рд▓реАрдЬрд╝ рд╢реЗрдбреНрдпреВрд▓ рдФрд░ рдХрдИ JEP (JDK рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯ рдкреНрд░рд╕реНрддрд╛рд╡) рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкреНрд░рдорд╛рдг рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рд╕рд╛рд▓реЛрдВ рддрдХ рдПрдХ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рднрд╛рд╖рд╛ рдмрдиреА рд░рд╣реЗрдЧреАред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд╛рд╡рд╛ рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдкреИрдорд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдкреНрд░рдЧрддрд┐ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рди рдХрд┐ рд╣рд░ рдХреАрдордд рдкрд░ рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдкреНрд░рдмрд▓ рдЗрдЪреНрдЫрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЕрдЧрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА, рднрд╛рд╖рд╛ рдореЗрдВред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо Grubhub рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓реЛрдордмреЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрднреА рд╣рдорд╛рд░реЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдФрд░ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд▓реЛрдореНрдмреЛрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рд╕рдВрдХрд▓рдХ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдирдП "рдХреАрд╡рд░реНрдб" рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд▓реЛрдореНрдмреЛрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдЧреНрд░реБрдм рд╣рдореЗрд╢рд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдирдП рдЙрдкрдХрд░рдг рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рд╣реЛрддреА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓реЛрдореНрдмреЛрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдЬреЛрдбрд╝реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЧреНрд░реЗрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рд▓реЛрдореНрдмреЛрдХ рдиреЗ рд╕рдВрдХрд▓рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЬрд╛рд╡рд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ: lombok рдирд┐рд░реНрднрд░рддрд╛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрдврд╝реЗрдЧрд╛ред рд▓реЛрдореНрдмреЛрдХ рдХреЛ рдЧреНрд░реИрдбрд▓ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдпрд╣ рдорд╛рд╡реЗрди рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ), рдмрд╕ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрд┐рд▓реНрдб.рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 plugins { id 'io.franzbecker.gradle-lombok' version '1.14' id 'java' } repositories { jcenter() // or Maven central, required for Lombok dependency } lombok { version = '1.18.4' sha256 = "" } 

рд▓реЛрдореНрдмреЛрдХ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╡реИрдз рдЬрд╛рд╡рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реЛрдЧрд╛ ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЕрдиреНрдпрдерд╛ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдорд╛рд╣реМрд▓ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓рдВрдмреЛрдХ рд╕рднреА рдкреНрд░рдореБрдЦ рдЬрд╛рд╡рд╛ рдЖрдИрдбреАрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕рд╣рдЬ рдПрдХреАрдХрд░рдгред "рд╢реЛ рдЙрдкрдпреЛрдЧ" рдФрд░ "рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЬрд╛рдПрдВ" рдЬреИрд╕реЗ рд╕рднреА рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб / рд╡рд░реНрдЧ рдореЗрдВ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд▓реЛрдореНрдмреЛрдХ


рд▓реЛрдореНрдмреЛрдХ рдХреЛ рдЬрд╛рдирдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрдХреНрд╢рди рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдПред рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

POJO рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рд▓реЗ рдХрд░реЗрдВ


"рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдЬрд╛рд╡рд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕" (рдкреАрдУрдЬреЗрдУ) рдХреЗ рд╕рд╛рде, рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг POJO рдореЗрдВ рдХрдИ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рдВрдЧрдд рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рднреА рд╣реИрдВред рд╡реЗ рдиреМрдХрд░реА рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рд▓реЛрдореНрдмреЛрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рдФрд░ рд╕рдВрд░рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдкреАрдУрдЬреЗрдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕ @Data рд╣рдо @Data рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд POJO рдХреЛ рд╕рд░рд▓ @Data рд╣реИрдВ:

 @Data public class User { private UUID userId; private String email; } 

@Data рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ рдЬреЛ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрдИ @Data рдПрдиреЛрдЯреЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

  • @ToString toString() рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕рд╛рдл рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЛрддрд╛ рд╣реИ: рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо, рд╕рднреА рдлрд╝реАрд▓реНрдб рдФрд░ рдЙрдирдХреЗ рдорд╛рдиред
  • @EqualsAndHashCode equals рдФрд░ @EqualsAndHashCode рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕реНрдерд┐рд░ рдФрд░ рдЧреИрд░-рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИред
  • @Getter / @Setter рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП @Getter / @Setter рдФрд░ @Getter / @Setter рдмрдирд╛рддрд╛ рд╣реИред
  • @RequiredArgsConstructor рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдлрд╝реАрд▓реНрдб рдФрд░ @NonNull рдПрдиреЛрдЯреЗрд╢рди рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдб @NonNull (рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред

рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдЕрдХреЗрд▓реЗ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди POJO рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред @Data рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗ рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝ рд╕рдХрддреА рд╣реИ рдФрд░ @Data рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдЖрд╡реЗрджрди рдХреА рдЙрддреНрддрд░рдЬреАрд╡рд┐рддрд╛ рдХреЛ рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред

рдПрдХ рдФрд░ рдЙрдкрд╛рдп рд╣реИред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ User рд╡рд░реНрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

 @Value @Builder(toBuilder = true) public class User { @NonNull UUID userId; @NonNull String email; @Singular Set<String> favoriteFoods; @NonNull @Builder.Default String avatar = тАЬdefault.pngтАЭ; } 

@Value рдПрдиреЛрдЯреЗрд╢рди @Value рд╕рдорд╛рди рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рд╕рднреА рдлрд╝реАрд▓реНрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдЬреА рдФрд░ рдЕрдВрддрд┐рдо рд╣реИрдВ, рдФрд░ рдмрд╕рдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @Value рдСрдмреНрдЬреЗрдХреНрдЯ рддреБрд░рдВрдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╕рднреА рдХреНрд╖реЗрддреНрд░ рдЕрдВрддрд┐рдо рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рддрд░реНрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, @AllArgsConstructor рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд╕реНрддреБ рд╣реИред

рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдСрд▓-рдЖрд░реНрдЧ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЬреЛрд╢реБрдЖ рдмрд▓реЛрдЪ рдиреЗ рдЕрдкрдиреА рдкреБрд╕реНрддрдХ рдЗрдлреЗрдХреНрдЯрд┐рд╡ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдбрд┐рдЬрд╛рдЗрдирд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдкрд░ @Builder рд╡рд░реНрдЧ @Builder рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

 User user = User.builder() .userId(UUID.random()) .email(тАЬgrubhub@grubhub.comтАЭ) .favoriteFood(тАЬburritosтАЭ) .favoriteFood(тАЬdosasтАЭ) .build() 

рдПрдХ рдмрд┐рд▓реНрдбрд░ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирдП рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдмрд┐рд▓реНрдбрд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╕реНрддреБ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ build() рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред

@NonNull рдЙрдкрдпреЛрдЧ рдпрд╣ @NonNull рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрдирд╛рддреЗ рд╕рдордп рдпреЗ рдлрд╝реАрд▓реНрдб рд░рд┐рдХреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛, NullPointerException рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрд╡рддрд╛рд░ рдлрд╝реАрд▓реНрдб рдХреЛ @NonNull рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ @NonNull рд▓реЗрдХрд┐рди рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ @Builder.Default рдПрдиреЛрдЯреЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ default.png рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд┐рд▓реНрдбрд░ рдкрд╕рдВрджреАрджрд╛рдлреВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдоред рдЬрдм рдХрд▓реЗрдХреНрд╢рди рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ @Singular рдПрдиреЛрдЯреЗрд╢рди рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ @Singular рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдмрд┐рд▓реНрдбрд░ рддрд░реАрдХреЗ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдпрд╣ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЫреЛрдЯреЗ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ, toBuilder = true рдкреИрд░рд╛рдореАрдЯрд░ toBuilder() рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рднреА рдорд╛рдиреЛрдВ рд╕реЗ рднрд░рд╛ рдПрдХ рдмрд┐рд▓реНрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдореВрд▓ рд╕реЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡-рдЖрдмрд╛рджреА, рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд░рд╣реЗред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @Value рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝реАрд▓реНрдб рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред

рдХреБрдЫ рдиреЛрдЯ рдЖрдЧреЗ рд╕реЗрдЯрд░ рдХреЗ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред @Wither рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд▓рд┐рдП @Wither рддрд░реАрдХреЗ рдмрдирд╛рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдкрд░, рдореВрд▓реНрдп; рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрджреНрдпрддрди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдХреНрд▓реЛрдиред @Accessors рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд @Accessors рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ fluent=true рдкреИрд░рд╛рдореАрдЯрд░ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдФрд░ рд╕реЗрдЯ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ @Builder рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд▓реЛрдореНрдмреЛрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЖрдкрдиреЗ рдПрдиреЛрдЯреЗрд╢рди рд╕рдВрд╢реЛрдзрдХ рдХреЛ рджреЗрдЦрд╛ рд╣реИ), рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ @Data рд╡рд░реНрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ @Data рдХреЛ рдХрд╕реНрдЯрдо рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдмрд╕ рдЗрд╕ @Data рд▓рд╛рдЧреВ рдХрд░реЗрдВред рд▓реЛрдореНрдмреЛрдХ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдмрд╕ рдХреБрдЫ рд╕рд░рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде, рдЖрдзрд╛рд░ POJO рдХреЛ рдЗрддрдиреА рд╕рдореГрджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╣реИрдВ рдЬреЛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рд╡рд┐рдХрд╛рд╕ рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИрдВред

рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд╣рдЯрд╛рдирд╛


рд▓реЛрдореНрдмреЛрдХ рди рдХреЗрд╡рд▓ рдкреАрдУрдЬреЗрдУ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ: рдЗрд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЛрдореНрдмреЛрдХ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрдпреЛрдЧ рдШрдЯрдХ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ, рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдбреАрдПрдУ (рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ)ред

рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА рд╡рд░реНрдЧ рдЬреЛ рд╕рд╛рд░реНрдердХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЙрд╕реЗ рдПрдХ рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдирдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдореНрдмреЛрдХ рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдПрдХрд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдЬрд░реНрдирд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВред

 @Slf4j // also: @CommonsLog @Flogger @JBossLog @Log @Log4j @Log4j2 @XSlf4j public class UserService { // created automatically // private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserService.class); } 

рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:

 @Slf4j @RequiredArgsConstructor @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) public class UserService { @NonNull UserDao userDao; } 

@FieldDefaults рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рдФрд░ рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИред @RequiredArgsConstructor рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ @RequiredArgsConstructor рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред @NonNull , рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ NullPointerException UserDao рдпрджрд┐ UserDao рдЖрд╡реГрддреНрддрд┐ рд╢реВрдиреНрдп рд╣реИред

рд▓реЗрдХрд┐рди рд░реБрдХреЛ, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ!


рдХрдИ рдФрд░ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рд▓реЛрдореНрдмреЛрдХ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рдЦрдВрдбреЛрдВ рдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдП, рд▓реЗрдХрд┐рди рд▓реЛрдореНрдмреЛрдХ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рд╣рд╛рд▓рд╛рдВрдХрд┐ var рдХреАрд╡рд░реНрдб рдЬрд╛рд╡рд╛ 9 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдлрд┐рд░ рднреА рдЪрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЛрдореНрдмреЛрдХ рдореЗрдВ рдХреАрд╡рд░реНрдб val , рдЬреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред

 // final Map map = new HashMap<Integer, String>(); val map = new HashMap<Integer, String>(); 

рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдПрдХ рдирд┐рдЬреА рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред @UtilityClass рдиреЗ рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ @UtilityClass рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕рдВрд╣рд┐рддрд╛рдмрджреНрдз рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЕрдВрдд рдореЗрдВ рдХреНрд▓рд╛рд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рд╕реНрдерд┐рд░ рдмрдирд╛рддрд╛ рд╣реИред

 @UtilityClass // will be made final public class UtilityClass { // will be made static private final int GRUBHUB = тАЬ GRUBHUBтАЭ; // autogenerated by Lombok // private UtilityClass() { // throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated"); //} // will be made static public void append(String input) { return input + GRUBHUB; } } 

рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдХрд╛рд░рдг рдореМрдЦрд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреА рдЕрдХреНрд╕рд░ рдЖрд▓реЛрдЪрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдЕрд▓рдЧ @SneakyThrows рдПрдиреЛрдЯреЗрд╢рди рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рддрд╛ рд╣реИ: @SneakyThrows ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдПрдХ RuntimeException рдореЗрдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рднреА рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЗрд╕ рддрдереНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ JVM рд░рди рдЯрд╛рдЗрдо рдореЗрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЬрд╛рд╡реЗрдж рд╣реА рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд▓реЛрдореНрдмреЛрдХ рдЗрд╕ рдЪреЗрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдмрд╛рдпреЛрдЯреЗрдХ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рд╣реИред

 public class SneakyThrows { @SneakyThrows public void sneakyThrow() { throw new Exception(); } } 

рдХрдВрдзреЗ рд╕реЗ рдХрдВрдзрд╛ рдорд┐рд▓рд╛рдХрд░


рдкреНрд░рддреНрдпрдХреНрд╖ рддреБрд▓рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд▓реЛрдореНрдмреЛрдХ рдХрд┐рддрдирд╛ рдХреЛрдб рдмрдЪрд╛рддрд╛ рд╣реИред IDE рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдПрдХ "de-lombok" рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд▓рдЧрднрдЧ рдЕрдзрд┐рдХрд╛рдВрд╢ @NonNull рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рджреЗрд╢реА рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ ( @NonNull рдПрдиреЛрдЯреЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ @NonNull )ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХреЛрдИ рднреА рдЖрдИрдбреАрдИ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдореВрд▓ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ User рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдПред

 @Value @Builder(toBuilder = true) public class User { @NonNull UUID userId; @NonNull String email; @Singular Set<String> favoriteFoods; @NonNull @Builder.Default String avatar = тАЬdefault.pngтАЭ; } 

рд▓реЛрдореНрдмреЛрдХ рд╡рд░реНрдЧ рд╕рд┐рд░реНрдл 13 рд╕рд░рд▓, рдкрдардиреАрдп, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд▓рд╛рдЗрдиреЗрдВ рд╣реИред рд▓реЗрдХрд┐рди рдбреЗ-рд▓рдореНрдмреЛрдХ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдХреНрд╖рд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреА рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ!

 public class User { @NonNull UUID userId; @NonNull String email; Set<String> favoriteFoods; @NonNull @Builder.Default String avatar = "default.png"; @java.beans.ConstructorProperties({"userId", "email", "favoriteFoods", "avatar"}) User(UUID userId, String email, Set<String> favoriteFoods, String avatar) { this.userId = userId; this.email = email; this.favoriteFoods = favoriteFoods; this.avatar = avatar; } public static UserBuilder builder() { return new UserBuilder(); } @NonNull public UUID getUserId() { return this.userId; } @NonNull public String getEmail() { return this.email; } public Set<String> getFavoriteFoods() { return this.favoriteFoods; } @NonNull public String getAvatar() { return this.avatar; } public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof User)) return false; final User other = (User) o; final Object this$userId = this.getUserId(); final Object other$userId = other.getUserId(); if (this$userId == null ? other$userId != null : !this$userId.equals(other$userId)) return false; final Object this$email = this.getEmail(); final Object other$email = other.getEmail(); if (this$email == null ? other$email != null : !this$email.equals(other$email)) return false; final Object this$favoriteFoods = this.getFavoriteFoods(); final Object other$favoriteFoods = other.getFavoriteFoods(); if (this$favoriteFoods == null ? other$favoriteFoods != null : !this$favoriteFoods.equals(other$favoriteFoods)) return false; final Object this$avatar = this.getAvatar(); final Object other$avatar = other.getAvatar(); if (this$avatar == null ? other$avatar != null : !this$avatar.equals(other$avatar)) return false; return true; } public int hashCode() { final int PRIME = 59; int result = 1; final Object $userId = this.getUserId(); result = result * PRIME + ($userId == null ? 43 : $userId.hashCode()); final Object $email = this.getEmail(); result = result * PRIME + ($email == null ? 43 : $email.hashCode()); final Object $favoriteFoods = this.getFavoriteFoods(); result = result * PRIME + ($favoriteFoods == null ? 43 : $favoriteFoods.hashCode()); final Object $avatar = this.getAvatar(); result = result * PRIME + ($avatar == null ? 43 : $avatar.hashCode()); return result; } public String toString() { return "User(userId=" + this.getUserId() + ", email=" + this.getEmail() + ", favoriteFoods=" + this.getFavoriteFoods() + ", avatar=" + this.getAvatar() + ")"; } public UserBuilder toBuilder() { return new UserBuilder().userId(this.userId).email(this.email).favoriteFoods(this.favoriteFoods).avatar(this.avatar); } public static class UserBuilder { private UUID userId; private String email; private ArrayList<String> favoriteFoods; private String avatar; UserBuilder() { } public User.UserBuilder userId(UUID userId) { this.userId = userId; return this; } public User.UserBuilder email(String email) { this.email = email; return this; } public User.UserBuilder favoriteFood(String favoriteFood) { if (this.favoriteFoods == null) this.favoriteFoods = new ArrayList<String>(); this.favoriteFoods.add(favoriteFood); return this; } public User.UserBuilder favoriteFoods(Collection<? extends String> favoriteFoods) { if (this.favoriteFoods == null) this.favoriteFoods = new ArrayList<String>(); this.favoriteFoods.addAll(favoriteFoods); return this; } public User.UserBuilder clearFavoriteFoods() { if (this.favoriteFoods != null) this.favoriteFoods.clear(); return this; } public User.UserBuilder avatar(String avatar) { this.avatar = avatar; return this; } public User build() { Set<String> favoriteFoods; switch (this.favoriteFoods == null ? 0 : this.favoriteFoods.size()) { case 0: favoriteFoods = java.util.Collections.emptySet(); break; case 1: favoriteFoods = java.util.Collections.singleton(this.favoriteFoods.get(0)); break; default: favoriteFoods = new java.util.LinkedHashSet<String>(this.favoriteFoods.size() < 1073741824 ? 1 + this.favoriteFoods.size() + (this.favoriteFoods.size() - 3) / 3 : Integer.MAX_VALUE); favoriteFoods.addAll(this.favoriteFoods); favoriteFoods = java.util.Collections.unmodifiableSet(favoriteFoods); } return new User(userId, email, favoriteFoods, avatar); } public String toString() { return "User.UserBuilder(userId=" + this.userId + ", email=" + this.email + ", favoriteFoods=" + this.favoriteFoods + ", avatar=" + this.avatar + ")"; } } } 

рд╣рдо UserService рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗред

 @Slf4j @RequiredArgsConstructor @FieldDefaults(makeFinal=true, level=AccessLevel.PRIVATE) public class UserService { @NonNull UserDao userDao; } 

рдпрд╣рд╛рдБ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдПрдХ рдирдореВрдирд╛ рд╕рдордХрдХреНрд╖ рд╣реИред

  public class UserService { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(UserService.class); private final UserDao userDao; @java.beans.ConstructorProperties({"userDao"}) public UserService(UserDao userDao) { if (userDao == null) { throw new NullPointerException("userDao is marked @NonNull but is null") } this.userDao = userDao; } } 

рдкреНрд░рднрд╛рд╡ рдХреА рд░реЗрдЯрд┐рдВрдЧ


рдЧреНрд░реБрдн рдореЗрдВ рдПрдХ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рдЦрд╛рджреНрдп рд╡рд┐рддрд░рдг рд╡реНрдпрд╡рд╕рд╛рдп рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВред рд╣рдордиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд┐рдпрд╛ рдФрд░ рд▓реЛрдореНрдмреЛрдХ рдЗрдВрдЯреЗрд▓реАрдЬ рдкреНрд▓рдЧрдЗрди рдореЗрдВ "рдбреА-рд▓рдореНрдмреЛрдХ" рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд▓рдЧрднрдЧ 180 рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓ рдЧрдИрдВ, рдФрд░ рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ 800 рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдХрд╛ рдЖрдзрд╛рд░ рд▓рдЧрднрдЧ 18,000 рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИред рдФрд╕рддрди, рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдореНрдмреЛрдХ рд░реЗрдЦрд╛ 23 рдЬрд╛рд╡рд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрдЪрд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде, рд▓реЛрдореНрдмреЛрдХ рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢


рд▓реЛрдореНрдмреЛрдХ рдПрдХ рдорд╣рд╛рди рд╕рд╣рд╛рдпрдХ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рдмрд╣реБрдд рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рднреА рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЛрдореНрдмреЛрдХ рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред

рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдПрдХ рдФрд░ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдХреЛрдбрдмреЗрд╕ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдЯреАрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдмреЗрд╕ рдХреА рд╕реБрд╕рдВрдЧрддрддрд╛ рдЯреАрдореЛрдВ рдХреА рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддреА рд╣реИ рдФрд░ рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмреЛрдЭ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред рд▓реЛрдореНрдмреЛрдХ рдЬрд╛рд╡рд╛ 6 рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЧреНрд░реБрдн рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд┐рд░реНрдл рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╕рдм рдХреЛрдб рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓реЛрдореНрдмреЛрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЙрдмрд╛рдК рднрд╛рдЧреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рдореЛрдВрдЯреЙрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕, рд╕рдореАрдХреНрд╖рдХреЛрдВ рдФрд░ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдЕрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯрд╛рдЗрдкреЛ рдХреА рдкреВрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред @NonNull рдХреА рд╢рдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдСрдЯреЛ @NonNull рдХреЗ рд▓рд╛рдн рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЖрдкрдХреА рдореЗрдЬ рдкрд░ рднреЛрдЬрди рдкрд╣реБрдВрдЪрд╛рдирд╛ рд╣реИ!

Source: https://habr.com/ru/post/hi438870/


All Articles