рдореИрдВ рдЕрдореЗрд░рд┐рдХрд╛ рдирд╣реАрдВ рдЦреЛрд▓реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рднрд╛рдиреБрдорддреА рдХрд╛ рдкрд┐рдЯрд╛рд░рд╛: рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреЗрдЯрд░реНрд╕, рд╕реЗрдЯрд░ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рддрд░реАрдХреЗ, рд╕реНрдЯреНрд░реАрдбрд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ, рд╣реИрд╢рдХреЛрдб, рдЗрдХреНрд╡рд▓реНрд╕, рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдЬреЛ рдХрднреА рдирд╣реАрдВ рдлреЗрдВрдХреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдереНрд░реЗрдб рдХреНрд▓реЛрдЬрд░, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╕рдм рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдирд╣реАрдВ рд╣реИ - рдЖрдзреБрдирд┐рдХ рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХреБрдЫ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рджрдмрд╛рдХрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдЕрджреНрдпрддрди рд░рдЦрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ, рд╣реИрд╢рдХреЛрдб рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░) рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрд╡рдпрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рд╕реЗ рджреВрд░ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЛрдб рдкреАрдврд╝реА рд╣реИ, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ
рд▓реЛрдореНрдмреЛрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ
рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рди рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдФрд░ рд╕рдВрднрд╡рдд: рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рд╡рд┐рдХрд╛рд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реНрддрд░ рдкрд░ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рдеред ред
рд▓реЛрдореНрдмреЛрдХ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
рд▓рдВрдмреЛрдХ рдЬрд╛рд╡рд╛ 6 рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЗрд╕рдХреА рдиреНрдпреВрдирддрдо рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЛрдореНрдмреЛрдХ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>0.11.0</version> <scope>provided</scope> </dependency>
рд▓реЛрдореНрдмреЛрдХ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХреЗрд╡рд▓ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓ рд▓реЛрдореНрдмреЛрдХ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг (0.11.0) рдЕрднреА рддрдХ рдорд╛рд╡реЗрди рдХреЗ рдХреЗрдВрджреНрд░реАрдп рднрдВрдбрд╛рд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕реЗ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рднрдВрдбрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЛ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣рддреЗ рд╣реИрдВ
рдЬрд╛рд╡рд╛ рдореЗрдВ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдореБрдЦреНрдп рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ рдЧреБрдгреЛрдВ рдХреА рдХрдореА рд╣реИред рдУрдУрдкреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЫрд╣ рдорд╛рдирдХ рд▓рд╛рдЗрдиреЗрдВ - рдЧреЗрдЯреНрдЯрд░ рдФрд░ рд╕реЗрдЯрд░ - рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдХреБрдЫ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдпрд╛ рдЯреЗрдкреЗрд╕реНрдЯреНрд░реА, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдХрд░ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдмрд╛рдпрдЯрдХреЛрдб рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд▓реЛрдореНрдмреЛрдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИред
public class GetterSetterExample { @Getter @Setter private int age = 10; @Setter(AccessLevel.PROTECTED) private String name; @Getter(lazy=true) private final Map<String, String> map = initMap(); }
рдЧреЗрдЯреНрдЯрд░ рдПрдиреЛрдЯреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ lazy = true рдЖрдкрдХреЛ рдЖрд▓рд╕реА рдлрд╝реАрд▓реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ theitMap () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рддрдм рддрдХ рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдкрд╣рд▓реА рдЧреЗрдЯреНрдЯрд░ рдХреЙрд▓ рдФрд░ рдереНрд░реЗрдб-рд╕реЗрдл рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдВ
рдбрдмрд▓-рдЪреЗрдХ рд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдкрдЯреЗред
рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХрд╛ рд╡рд┐рдирд╛рд╢
POJO рд╡рд░реНрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдпрд╛ рддреЛ рдЬрдЯрд┐рд▓рддрд╛ рдпрд╛ рд╡рд┐рд╡рд┐рдзрддрд╛ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛, рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛, рдХреЗрд╡рд▓ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛, рдПрдХ рд╕реНрдерд┐рд░ рдХрд╛рд░рдЦрд╛рдирд╛ рд╡рд┐рдзрд┐ред рд▓реЛрдореНрдмреЛрдХ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдПрдиреЛрдЯреЗрд╢рди @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor рдФрд░ staticName рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
@RequiredArgsConstructor(staticName = "of") @AllArgsConstructor(access = AccessLevel.PROTECTED) public class ConstructorExample<T> { private String name; @NonNull private T description; }
рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдпрд╣рд╛рдБ рдорд┐рд▓рддрд╛ рд╣реИ:
public class ConstructorExample<T> { private String name; @NonNull private T description; private ConstructorExample(T description) { if (description == null) throw new NullPointerException("description"); this.description = description; } public static <T> ConstructorExample<T> of(T description) { return new ConstructorExample<T>(description); } @java.beans.ConstructorProperties({"name", "description"}) protected ConstructorExample(String name, T description) { if (description == null) throw new NullPointerException("description"); this.name = name; this.description = description; }
рд╣рдо рдорд╛рдирдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ: рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╣реИрд╢рдХреЛрдб, рдмрд░рд╛рдмрд░
рд╕рдорд╛рди рдФрд░ рд╣реИрд╢рдХреЛрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рд╢рд╛рдпрдж рдпрд╣ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмреНрд▓реЛрдХ
рдХреЗ рдкреНрд░рднрд╛рд╡реА рдЬрд╛рд╡рд╛ рдФрд░
рдУрдбрд╕реНрдХреА рдХреЗ рд▓реЗрдЦ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЕрджреНрдпрддрд┐рдд рд░рдЦрдирд╛ рдФрд░ рднреА рдХрдард┐рди рд╣реИ, рдФрд░ рд╡реЗ рдХрдХреНрд╖рд╛ рдХреЗ рдЕрдЪреНрдЫреЗ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдЯрд┐рдВрдЧ рд╡рд┐рдзрд┐ рдЗрддрдиреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреНрд▓рд╛рд╕ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рднреА рдмрд╣реБрдд рд╕реБрдЦрдж рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рд▓реЛрдореНрдмреЛрдХ рдХреЛ рджреЛ рд╕рд░рд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдорджрдж рд╕реЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЖрднрд╛рд░реА рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ:
@ToString(exclude="id") @EqualsAndHashCode(exclude="id") public class Person { private Long id; private String name; ... }
рдЕрджреГрд╢реНрдп рд▓рдХрдбрд╝рд╣рд╛рд░рд╛
рдпрджрд┐ рдЖрдк рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЙрдЧрд┐рдВрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдереИрддрд┐рдХ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдШреЛрд╖рдгрд╛ рд╣реЛрдиреЗ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ:
public class Controller { private static final Logger log = LoggerFactory.getLogger(Controller.class); public void someMethod() { log.debug("someMethod started");
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд▓реЛрдореНрдмреЛрдХ рдЖрдкрдХреА рдкрд╕рдВрджреАрджрд╛ рд▓реЙрдЧрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдиреЛрдЯреЗрд╢рди
рд▓реЙрдЧ , @CommonsLog, @ Log4j рдпрд╛ @ Slf4j рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ:
@Slf4j public class Controller { public void someMethod() { log.debug("someMethod started");
рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВ
рдЕрдВрддрд┐рдо рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдЕрдЪреНрдЫреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдЯреНрд░реЗрдВрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдирд╛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдмрд╛рд╣рд░ рд░реЗрдВрдЧрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рддрдХ рдЬрд╛рд╡рд╛ рд╕реЗ рд╕реНрдХрд╛рд▓рд╛ рдпрд╛ рдЧреНрд░реВрд╡реА рдкрд░ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЛрдордмреЛрдХ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public class ValExample { public String example() { val map = new HashMap<String, Map<String, String>>(); for (val entry: map.entrySet()) { ...
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдЪрд░ рдХреЛ рдЕрдВрддрд┐рдо рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдкрд╡рд┐рддреНрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХреЛ
рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ,
"рдкреНрд░рднрд╛рд╡реА рдЬрд╛рд╡рд╛" рдмреНрд▓реЙрдХ рдпрд╛ рд╕реНрдЯреБрдЯрд┐рдВрдЧ
рд░реЛрдмрд╕реНрдЯ рдЬрд╛рд╡рд╛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдпрд╛ рд╢рд╛рдпрдж рд╡реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдирд╣реАрдВред рдпрд╛, рд╢рд╛рдпрдж, рдЙрдирдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдЕрдкрд╡рд╛рдж рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдкреНрд░реЗрд░рдгрд╛ рдереА - рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрднреА рднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрдЧрд╛! рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, UnsupportedEncodingException рдХреЗ рд╕рд╛рде, рдпрджрд┐ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ UTF-8 рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдЯреНрд░рд╛рдЗ-рдХреИрдЪ рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд▓реЙрдЧ рдореЗрдВ рдЕрд░реНрдерд╣реАрди рдЖрдЙрдЯрдкреБрдЯ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрднреА рднреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдПрдХ рд░рдирд╡реЗ рд░реИрдкрд░ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЪрд╛рд▓реВ рдХрд░реЗрдВ рдЬреЛ рдкреИрджрд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдд рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдЕрд╡рд░реЛрдзрди рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ (рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗ рдЖрдк, рдФрд░ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣рдореЗрд╢рд╛ рд░рд┐рд╡реЙрд▓реНрд╡рд░ рд╣рдбрд╝рдкрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдЬрдЧрд╛рддреЗ рд╣реИрдВ)ред рд▓реЛрдореНрдмреЛрдХ рднреА рдпрд╣рд╛рдБ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
public class SneakyThrowsExample implements Runnable { @SneakyThrows
рдЗрд╕ рдЬрд╛рджреВ рдЯреЛрдирд╛ рдХреЗ рд▓рд┐рдП, рдмрд╛рдХреА рд╕рдм рдЪреАрдЬреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдкрдХреЛ рд▓реЛрдореНрдмреЛрдХ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рд░рд▓ рд╣реИ: рд▓реЛрдореНрдмреЛрдХ рдиреЗ рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдХрд░ рд╕рдВрдХрд▓рдХ рдХреА рд╕рддрд░реНрдХрддрд╛ рдХреЛ рдХрдо рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдлрд┐рд░ рдЪреБрдкрдЪрд╛рдк рдЗрд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ред рдЪрд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рд╕реНрддрд░ рдкрд░, рдЖрдк рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рднреА рдЬрд┐рд╕реЗ рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рд╣реА рд╕рд┐рдВрдХ
рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЬрд╛рд╡рд╛ рдореЗрдВ рдЕрдкрдиреЗ рдореБрд╣рд╛рд╡рд░реЗ рдФрд░ рдкреИрдЯрд░реНрди рд╣реИрдВред рдЕрдЪреНрдЫреА рдкреНрд░рдерд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдЕрдВрддрд┐рдо рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓реЙрдХ рдкрд░ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХреБрдЫ рдЕрд╕рдВрдмрджреНрдз рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд╛рд▓реЗ рдФрд░ рд╣рд╛рд░реНрдб-рдЯреВ-рдХреИрдЪ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рд▓реЛрдореНрдмреЛрдХ @ рд╕реНрдерд┐рд░ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рд╕реЗ @Synchronized рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
@Synchronized public static void hello() { System.out.println("World"); } @Synchronized public int answerToLife() { return 42; }
рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:
private static final Object $LOCK = new Object[0]; private final Object $lock = new Object[0]; public static void hello() { synchronized($LOCK) { System.out.println("world"); } } public int answerToLife() { synchronized($lock) { return 42; } }
рдФрд░ IDE рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ?
рдЗрди рд╕рднреА рдЕрджреНрднреБрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмреЗрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛрддрд╛, рдпрджрд┐ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЧреНрд░рд╣рдг рдпрд╛ рдЗрдВрдЯреЗрд▓реАрдЬреЗ рдЖрдИрдбреАрдИрдП рдореЗрдВ рдЦреЛрд▓рддреЗ, рддреЛ рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЗрдВ рд╕рдВрдХрд▓рдХ рдХреЗ рдзрд░реНрдореА рдХреНрд░реЛрдз рд╕реЗ рд▓рд╛рд▓ рд▓реМ рдореЗрдВ рднрдбрд╝рдХ рдЬрд╛рддреАрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реИред IntelliJ IDEA рдХреЗ рд▓рд┐рдП, рдкреНрд▓рдЧрдЗрди рдорд╛рдирдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореМрдЬреВрдж рд╣реИ:

рдЧреНрд░рд╣рдг рдФрд░ рдиреЗрдЯрдмреАрдиреНрд╕ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдкрдирд╛ рдереЛрдбрд╝реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдЖрдкрдХреЛ lombok.jar рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдореМрдЬреВрджрд╛ рдЧреНрд░рд╣рдг рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдкрд░ рд▓реЛрдореНрдмреЛрдХ рдХреЛ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░реЗрдЧрд╛:

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

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