рдФрд░ рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬрд╛рджреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╣реИ:
рдЗрд╕реЗ рд▓реЗрдВ:
import groovy.transform.Canonical import groovy.transform.TupleConstructor @Canonical @TupleConstructor class Person { int id String firstName String lastName Date birthdate }
рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдорд┐рд▓рддрд╛ рд╣реИ:
100 рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд░реНрдХ рдХреЗ рдЬрд╛рд╡рд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ import java.util.Date; import java.util.Map; public class Person { private int id; private String firstName; private String lastName; private Date birthdate;
рдЦреИрд░, рд╣рд╛рдБ, рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рдХреБрдЫ рднреА рдЕрдиреЛрдЦрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╣рд╛рдБ
рд▓реЛрдореНрдмреЛрдХ , рдХрд┐рд╕реА рднреА рдЕрдЪреНрдЫреЗ рдЖрдИрдбреАрдИ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕ рдкреВрд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред
рддреЛ рдЧреНрд░реВрд╡реА,
рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХреНрдпреЛрдВ?
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЧреНрд░реВрд╡реА рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ (рдлрд┐рд░, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ) рдмрддрд╛рдПрдВ рдХрд┐ рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдЧреНрд░реВрд╡реА рдХреЗ рдкрд╛рд╕ рдЖрдЬ рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ, рдФрд░ рдХреЗрд╡рд▓ "рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛" рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ "рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкрд░рд┐рдЪрдп" рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВред
рддреЛ рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдФрд░ рд▓реЛрдореНрдмреЛрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЧреНрд░реВрд╡реА рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдЧреНрд░реВрд╡реА рдХреЛ рд▓рд┐рдЦреЗрдВ, рдпрд╛ рд░рдиреМрдЯреА рдореЗрдВ рдЧреНрд░реВрд╡реА рдХреЛ рдЪрд▓рд╛рдПрдВред рдкрд░рд┐рд╡рд░реНрддрди рд╕реЙрд░реНрдЯ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЧреНрд░реВрд╡реА рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдЬрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреНрд░реВрд╡реА рдХреЛ "рдбреНрд░реИрдЧ" рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рд╛рдирджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ: "рджреЗрдЦреЛ, рдмреЙрд╕, рдпрд╣ рдареАрдХ рд╣реИ, рдпрд╣ рдмреЙрдпрд▓рд░ рдмреЙрдпрд▓рд░ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ!" рдФрд░ рдлрд┐рд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрджрдо рд╕реЗ рдХрджрдо, рд╕реНрдкреЙрдХ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде, рдЧреНрд░реИрдбрд▓ рдкрд░ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдкреАрдЫреЗ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреНрд░реВрд╡реА рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ - рдЧрддрд┐рд╢реАрд▓, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдгред рдПрдПрд╕рдЯреА рд░реВрдкрд╛рдВрддрд░рдг рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд▓реЛрдореНрдмреЛрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдмрд╣реБрдореБрдЦреА рд╣реИрдВред
рдкрд┐рдЫрд▓реЗ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдХрдо рд╕реЗ рдХрдо, рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд┐рд╕реА рднреА рдЧреНрд░реВрд╡реА-рд╕рдХреНрд╖рдо рдЖрдИрдбреАрдИ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЧреНрд░рд╣рдгред
рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХреЗ рд╕рд╛рде рд▓реЛрдореНрдмреЛрдХ рдХреА рдлреНрд░рдВрдЯ-рдПрдВрдб рддреБрд▓рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрд▓реЛ рд╡рд╣рд╛рдВ рд░реБрдХреЗрдВред
рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рдкреАрдврд╝реА рд╕реНрд░реЛрдд рдХреЛрдб рдкреАрдврд╝реА рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рдлрд╛рдпрджрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ "рдкрддрди" рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢рд╛рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ) - рдкреАрдврд╝реА рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ "рд╕рдорд░реНрдерд┐рдд" рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ IntelliJ IDEA рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрд╢рдХреЛрдб рдФрд░ рдмрд░рд╛рдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдореИрдВ рдЗрди 2 рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдлреВред
рдЬрд╛рд╡рд╛ рдФрд░ рдЧреНрд░реВрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред
рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрд░рд┐рдЪрдп
рдЧреНрд░реВрд╡реА рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрдкрд╣рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ,
рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ ред рдпрд╣ рджреЛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрддрд╛ рд╣реИ - рд╕рдВрдХрд▓рди рдХреЗ рд╕рдордп рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ред
рд░рдирдЯрд╛рдЗрдо рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╣реИ "рдУрд╣, рдХреНрдпрд╛ рдЖрдкрдиреЗ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХреА рд╣реИ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ? рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдм рд╣рдо рдЙрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдереНрд░реЗрдб рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдиреЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдерд╛ред " рдЗрд╕рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ - рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдЧреНрд░реВрд╡реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдРрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдбрд░реЛрдВ, рд╕реНрд▓реИрдкрд░реНрд╕, рдЧреНрд░реЗрд▓реНрд╕, рд░реИрдЯрдкреИрдХ, рдЧреНрд░реИрдбрд▓ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдм рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ (рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдмреБрджреНрдз рдкреАрдЖрд░ рдХреЗ рдкреИрд░рд╛ 1 рджреЗрдЦреЗрдВ)ред
рдЕрдм рд╣рдо рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН рдХреЛрдб рдореЗрдВ рдПрдХ рдХреЛ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдмрд╛рдпрдЯреЗрдХреЛрдб (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХ) рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рдЧреНрд░реВрд╡реА рдореЗрдВ рд╣реА рд╕рд╣реА, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдиреЛрдЯреЗрд╢рди рдпрд╛ рдЕрдиреНрдп рдПрдбрд┐рдЯрд┐рд╡реНрд╕ рдХреЗ рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
class Person { String name }
рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдмрд╛рдЗрдЯрдХреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХреНрд╖реЗрддреНрд░
private
(рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
name
), рдФрд░ рд╕рднреА рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ (рдареАрдХ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓
getName()
рдФрд░
setName(String name)
, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ)ред
рдпрд╣ рд╕реБрдВрджрд░ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдореЗрдЯреНрд░реЛрдкреЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╕реЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рддрд░рдг рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрджреНрднреБрдд рдЖрджрдореА
рдбрд╛рдиреЛ рдлреЗрд░рд┐рди рдиреЗ рдЦреБрдж рд╕реЗ рдХрд╣рд╛: "рд▓реЗрдХрд┐рди
рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЕрднреА рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИрдВ, рдФрд░ рд╡реЗ рд╕рднреА рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ! рдЪрд▓реЛ рдХреБрдЫ рдкреНрд▓рдЧ-рдЗрди рдФрд░ рдПрдХреНрд╕рдкреЗрдВрдбреЗрдмрд▓ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ! тАЭрдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖ (рдкрд╣рд▓рд╛, рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд,
@Bindable
рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдХреЛрдб рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЬреАрдм рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ рдЬреЛ рдЧреНрд░реВрд╡реА рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдордХреНрдЦреА
рдкрд░ рдПрдХ
рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрд╛рдХреА рдХреЗрд╡рд▓ рдорд╛рдВрдЧ рдкрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:
- рддреЛ, рдПрдиреЛрдЯреЗрд╢рди рдкрд╛рдпрдирд┐рдпрд░
@Bindable
рдФрд░ рдЙрд╕рдХреЗ рджреЛрд╕реНрдд @Vetoable
рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреБрдгреЛрдВ рдореЗрдВ @Vetoable
рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрди рдкрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рд╣реБрдХ рдХрд░рдиреЗ рдФрд░ рд╕реБрдирдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рдмрджрд▓рд╛рд╡ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИред - рдмрд╣реБрдд рдлреИрд╢рдиреЗрдмрд▓ рд╢рдмреНрдж
@Category
рдФрд░ @Mixin
рдПрдХ рд╡рд░реНрдЧ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЦреИрд░, рдЕрд╢реБрджреНрдзрд┐рдпрд╛рдБ ! @Delegate
рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рдкрд╛рд╕ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рджреНрд╡рд╛рд░рд╛, рд╣рд╛рдБ?
рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
class Event { String name @Delegate Date date }
рд╣рдореЗрдВ рдПрдХ рддреИрдпрд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдордВрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИ import java.util.Date; public class Event { private String name; private Date date; public String getName() { return this.name; } public void setName(String name) { this.name = name; } public Date getDate() { return this.date; } public void setDate(Date paramDate) { this.date = paramDate; } public boolean after(Date otherDate) { return date.after(otherDate); } public boolean before(Date otherDate) { return date.before(otherDate); } public long getTime() { return date.getTime(); } public void setTime(long timestamp) { date.setTime(timestamp); } }
@Immutable
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рддрд╛ рд╣реИ:
- рд╡рд╛рд╕реА
ReadOnlyPropertyException
рдлреЗрдВрдХ рджреЗрддреЗ ReadOnlyPropertyException
- рдХрдХреНрд╖рд╛
final
рд╣реЛ рдЬрд╛рддреА рд╣реИ - рдХреНрд╖реЗрддреНрд░
private
рдФрд░ final
рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ: рджреЛрдиреЛрдВ рдмрд╕ рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ (рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ)
- рдХреЛрдб рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдмреИрдХ рдЕрдк рд╣реИ
equals
, hashcode
рдФрд░ toString
рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ
- рдпрд╣рд╛рдБ
@InheritConstructors
рд╕рд╛рде рд╕рдорд╛рди рд╕реЗрдирд╛рдирд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ: @InheritConstructors
рд╕реБрдкрд░ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╕рднреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, @TupleConstructor
рдПрдХ рдореИрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдлрд╝реАрд▓реНрдб рдирд╛рдо рдФрд░ рдорд╛рди рд╣реИрдВ (рдорд╛рди рджреЗрдЦреЗрдВ рдЗрд╕ @AutoClone
рдХрд╛ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг), @AutoClone
рдФрд░ @AutoExternalize
рдЬреЛрдбрд╝реЗрдВ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐рдпрд╛рдВ, рдФрд░ @Canonical
"рд╕рд╣реА рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ" рдХрд░рддрд╛ рд╣реИ - рдмрд┐рдирд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╕рд╛рде, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдЬреЛ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ (рдПрдХ рдкрдВрдХреНрддрд┐ рдФрд░ рдПрдХ рдирдХреНрд╢реЗ рджреЛрдиреЛрдВ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ equals
, hashCode
рдФрд░ toString
ред рдЦреИрд░, @Immutable
рддрд░рд╣, рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ - рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рднреА рджреЗрдЦрд╛ред - рдПрдХ рдФрд░ рдлреИрд╢рдиреЗрдмрд▓ рд╢рдмреНрдж!
@Lazy
рдЖрд▓рд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕реЙрдлреНрдЯ-рд░реЗрдлрд░реЗрдВрд╕ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП (рдорд╛рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░) рдПрдХ @Lazy
рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реНрдб рдлрд╝реАрд▓реНрдб рдмрдирд╛рдПрдЧрд╛ @Newify
new
рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп new
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рд░реВрдмреА рдХреЗ рд░реВрдк рдореЗрдВ), рдпрд╛, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдирд╛рдо рд╕реЗ, рдмрд┐рдирд╛ new
(рдкрд╛рдпрдерди рдХреЗ рд░реВрдк рдореЗрдВ)ред рдпрд╣рд╛рдБ, рд╢рд╛рдпрдж, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:
@Newify rubyLikeNew() { assert Integer.new(42) == 42 }
рдпрд╛ рднреА
@Newify([Tree, Leaf]) buildTree() { Tree(Tree(Leaf(1), Leaf(2)), Leaf(3)) }
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо new
рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ Tree
рдФрд░ Leaf
рдмрдирд╛рддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рд╕рдордХрдХреНрд╖ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
public Tree buildTree() { return new Tree(new Tree(new Leaf(1), new Leaf(2)), new Leaf(3)); }
- рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЕрдиреНрдпрд╛рдп рдХрд╛ рд╕реБрдзрд╛рд░ рд╣реИ: рдЧреНрд░реВрд╡ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдлрд╝реАрд▓реНрдб
public
ред package
рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП? @PackageScope
рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ! - рднрд▓реЗ рд╣реА рдЖрдк рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдПрдХ рдкреИрдЯрд░реНрди рдпрд╛ рдПрдХ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдорд╛рдирддреЗ рд╣реЛрдВ, рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдареАрдХ рд╣реИ, рдпрд╛ рдмрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдКрдкрд░
@Singleton
рдбрд╛рд▓ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдбрдмрд▓ рд▓реЙрдХ рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде lazily-initialized рд╕рд┐рдВрдЧрд▓рдЯрди рддреИрдпрд╛рд░ рд╣реИред - рд╣рдорд╛рд░реЗ, # razborpoletovy рдПрдВрдбреНрд░реА рдиреЗ рдПрдХ рдЕрджреНрднреБрдд рдПрдХ рд▓рд┐рдЦрд╛, рдЬрд┐рд╕рдореЗрдВ Groove 2.2
@Memoized
рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рд╡рд┐рдзрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ (рдФрд░ рд╣рд╛рдБ, рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рдорд▓рд╛) - рдФрд░ рдЕрдВрдд рдореЗрдВ - рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдЙрдкрд╛рдЦреНрдпрд╛рди
@NotYetImplemented
- рдпрд╣ JUnit рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдлрд╝реНрд▓рд┐рдк рдХрд░рддрд╛ рд╣реИ: рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╛рд╕ рдЧрд┐рд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдпрд╣ def true=false //happy debugging
рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ, рдпрд╣ рдмрд╛рдд рдЯреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ - рд╣рдо рдЙрди рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдЕрднреА рддрдХ рдкрдВрдЬреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @NotYetImplemented
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрддрди рд╕реЗ рд╣рдореЗрдВ рдмрд╛рдХреА рдХреЗ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ред
рдФрд░ рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ!
@CompileStatic
рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЯреНрдЯрд░-рдорд╣рддреНрд╡рдкреВрд░реНрдг
@CompileStatic
,
@Field
, рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рднреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣, рдлрд┐рд░ рднреА, рдПрдХ рдФрд░ рд╕рдордп рд╣реИ (рдареАрдХ рд╣реИ, рдпрд╛, рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдмреБрджреНрдз рдкреАрдЖрд░ рдХреЗ рдмрд┐рдВрджреБ 1 рджреЗрдЦреЗрдВ)ред
PS рдЕрдм рдЬрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рддреЛ рдирдП рдПрдПрд╕рдЯреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ
рдХреЛ рдХреИрд╕реЗ рдФрд░
рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рджреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╣рдмреНрд░-рд▓реЗрдЦ рд╣реИрдВред рдиреАрдЪреЗ рджреЗрдЦреЗрдВ, рдвреАрда рдкреАрдЖрд░ рдХреЗ рдкреИрд░рд╛ 2 рдореЗрдВред
рдФрд░ рдЕрдм 2 рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдвреАрда рдкреАрдЖрд░:
- рдЬрд┐рдиреНрд╣реЗрдВ рдЧреНрд░реВрд╡ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдЙрдиреНрдирдд рдкрд░реНрдпрд╛рдкреНрдд рдмрд┐рдВрджреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░реА рдЯреНрд░реЗрдирд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ, 17 рдЕрдкреНрд░реИрд▓ рдХреЛ рдорд╛рд╕реНрдХреЛ рдореЗрдВ рдФрд░ 15 рдЕрдкреНрд░реИрд▓ рдХреЛ рдХрдЬрд╝рд╛рди рдореЗрдВ (рджрд╕реНрддрдХ рдПрд▓реЗрдХреНрд╕рд╛ )
- рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рдмреЙрдпрд▓рд░ рдХреЗ
рд╕рд╛рде рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХреЙрдХрд░реЛрдЪ рд╕реЗ рд▓рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдПрд╕рдЯреА рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, 18 рдЕрдкреНрд░реИрд▓ рдХреЛ рдЬреЗрдкреЛрдЯ рдкрд░ рдореЗрд░реА рд░рд┐рдкреЛрд░реНрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ 16 рдЕрдкреНрд░реИрд▓ рдХреЛ рдЬрд╛рд╡рд╛рдбреЗ рдХрдЬрд╝рд╛рди (рдлрд┐рд░ рд╕реЗ рдПрд▓реЗрдХреНрд╕рдмреЗрд▓ рджрд╕реНрддрдХ рджреЗрдВ )