рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рди рдХрд░реЗрдВ

рдкрд░рд┐рдЪрдп



рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдЕрдХреНрд╕рд░ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдПрдХреНрд╕рдПрдордПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЙрддреНрддрд░ рдПрдХ рд╣реИ: "рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ!"ред


рд╕реАрдпреВрдмреАрдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ , рдлреНрд░реЗрдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпреВрдЖрдИ рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдерд╛ред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдХрдВрдЯреНрд░реЛрд▓рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдореЗрдердб рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╕рд╛рддрд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рдПрдХ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХреЗрд╡рд▓ рдЙрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╣реА рд╕рдордп рдкрд░ ( рдСрдмреНрдЬрд░реНрд╡рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрдЦреЗрдВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ java.lang.reflect.Method рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдЖрдкрдХреЛ рдмрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдиреЛрдЯреЗрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ, рдЙрдирдХреЗ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рдФрд░ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдзрд┐ (рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдереЛрдХ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рд░реЛрдХрддреА рдереА, рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рдШрдЯрдирд╛рдПрдВ рдпреВрдЖрдИ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЗ рд╕рдордп рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдХреАрдордд рдЪреБрдХрд╛рдиреА рд╣реЛрдЧреАред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдХрд┐ рдЖрдк рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдореЗрдердбреИрдВрдбрд▓реНрд╕ рдФрд░ рд▓реИрдореНрдмрдбрд╛рдореЗрдЯреИрдлрд╝реИрдХреНрдЯреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдПрдХ рд╣рд╛рдм рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рд╣реИ , рдФрд░ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк - рдПрдУрдЯреА рд╕рдВрдХрд▓рди рдФрд░ рд▓реИрдВрдмрдбрд╛рдореЗрдЯрд┐рдлреИрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдб рдмрдирд╛рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрд╣ рд╕реАрдпреВрдмреАрдП рдврд╛рдВрдЪреЗ рдореЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдкрд░рд╛рд╡рд░реНрддрди: рдкреБрд░рд╛рдирд╛ред рдЕрдЪреНрдЫрд╛ред рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп


рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдореЗрдВ, рдкрд░рд╛рд╡рд░реНрддрди рдпрд╛ рдкрд░рд╛рд╡рд░реНрддрди (рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд╛ рдирд╛рдо, рдЕрдВрдЧреНрд░реЗрдЬреА рдкреНрд░рддрд┐рдмрд┐рдВрдм) рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЕрдкрдиреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред (c) рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ред


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


рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рд╣рдордиреЗ рддреАрди рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ:


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


рдЯрд╛рдЗрдкрд┐рдВрдЧ - рдпрджрд┐ рдЖрдк рдХреЛрдб рдореЗрдВ java.lang.reflect.Method рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ java.lang.reflect.Method , рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред рдФрд░ рдХрд╣реАрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдХрд┐рддрдиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред рдЧрд▓рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдВрдХрд▓рди рдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдирд╣реАрдВред


рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ - рдпрджрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рддрд░реАрдХрд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░рдг рдХреА рддрд╣ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдИ invoke() рдХреЙрд▓ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред


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


рдФрд░ рдХреНрдпрд╛ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ?


рдПрдУрдЯреА рд╕рдВрдХрд▓рди рдФрд░ рдХреЛрдб рдкреАрдврд╝реА - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдЧрддрд┐ рджреЗрдВ!


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


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


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


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


рд╕реАрдпреВрдмреАрдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдЯрд┐рдХ рдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдПрдХ рдЪрд░рдо рдХрджрдо рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЬрд╛рдиреЗ рдереЗред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рддреЗрдЬ рд╣реИ?


рд▓реЗрдореНрдмрдбрд╛рдореЗрдЯрд┐рдлреИрдХреНрдЯ - рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдХреЙрд▓, рд▓реЗрдХрд┐рди рддреЗрдЬ


рдЬрд╛рд╡рд╛ 7 рдиреЗ рдЬреЗрд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢ рдкреЗрд╢ рдХрд┐рдпрд╛ - invokedynamic ред рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрд▓рд╛рджрд┐рдореАрд░ рдЗрд╡рд╛рдиреЛрд╡ рджреНрд╡рд╛рд░рд╛ jug.ru рдкрд░ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреНрд░реВрд╡реА рдЬреИрд╕реА рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереА, рдпрд╣ рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдореНрдореАрджрд╡рд╛рд░ рдерд╛ред рдирдП рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╣реА, JDK рдореЗрдВ рдПрдХ рд╕рдВрдмрджреНрдз API рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛:


  • рдХрдХреНрд╖рд╛ MethodHandle - рдЬрд╛рд╡рд╛ 7 рдореЗрдВ рд╡рд╛рдкрд╕ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╣реБрдд рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • LambdaMetafactory - рдпрд╣ рд╡рд░реНрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛ 8 рд╕реЗ рд╣реИ, рдпрд╣ рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдмрди рдЧрдпрд╛ рд╣реИ, рдЕрдВрджрд░ MethodHandle рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ MethodHandle рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ (рдирд┐рд░реНрдорд╛рддрд╛, рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдкреНрдб рдкреЙрдЗрдВрдЯрд░ рд╣реЛрдиреЗ рдХреЗ MethodHandle , java.lang.reflect.Method рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдФрд░ рдХреЙрд▓ рддреЗрдЬреА рд╕реЗ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдкрд░рд╛рд╡рд░реНрддрди рдПрдкреАрдЖрдИ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм MethodHandle ред


рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕, рд╢реБрджреНрдз MethodHandle рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднреА рдзреАрдорд╛ рд╣реЛ рдЧрдпрд╛ред MethodHandle рд╕реНрдерд┐рд░ рдмрдирд╛рдХрд░ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд╣реАрдВред OpenJDK рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ MethodHandle рдХреЙрд▓ рдХреА рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЪрд░реНрдЪрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЬрдм LambdaMetafactory рдХреНрд▓рд╛рд╕ LambdaMetafactory , рддреЛ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореМрдХрд╛ рдерд╛ред LambdaMetafactory рдПрдХ рд▓реИрдореНрдмреНрдбрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╕реАрдзрд╛ рд╡рд┐рдзрд┐ рдХреЙрд▓ LambdaMetafactory рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ MethodHandle рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░, рдЙрддреНрдкрдиреНрди рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдкреАрдврд╝реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ BiFunction рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрддреНрддреАрд░реНрдг рдЧреЗрдЯреНрдЯрд░ рд╡рд┐рдзрд┐ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ:


 private BiFunction createGetHandlerLambda(Object bean, Method method) throws Throwable { MethodHandles.Lookup caller = MethodHandles.lookup(); CallSite site = LambdaMetafactory.metafactory(caller, "apply", MethodType.methodType(BiFunction.class), MethodType.methodType(Object.class, Object.class, Object.class), caller.findVirtual(bean.getClass(), method.getName(), MethodType.methodType(method.getReturnType(), method.getParameterTypes()[0])), MethodType.methodType(method.getReturnType(), bean.getClass(), method.getParameterTypes()[0])); MethodHandle factory = site.getTarget(); BiFunction listenerMethod = (BiFunction) factory.invoke(); return listenerMethod; } 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп BiFunction рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рдЕрдм, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдореЗрдердб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ BiFunction рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ @EventListener рдЪрд┐рд╣реНрдирд┐рдд рд╡рд┐рдзрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ (рдереЛрдбрд╝рд╛ рд╕рд░рд▓реАрдХреГрдд, рд╕рддреНрдп) рдХреЛрдб рд▓реЗрдВ:


 public class ApplicationListenerMethodAdapter implements GenericApplicationListener { private final Method method; public void onApplicationEvent(ApplicationEvent event) { Object bean = getTargetBean(); Object result = this.method.invoke(bean, event); handleResult(result); } } 

рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдХреЛрдб рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд▓реИрдореНрдмрдбрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:


 public class ApplicationListenerLambdaAdapter extends ApplicationListenerMethodAdapter { private final BiFunction funHandler; public void onApplicationEvent(ApplicationEvent event) { Object bean = getTargetBean(); Object result = funHandler.apply(bean, event); handleResult(result); } } 

рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ:


рдПрдХ рд▓рдВрдмреЛрджрд░ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ - рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рдмрд╕ рдПрдХ рд╡рд┐рдзрд┐" рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред


рдЯреНрд░реЗрд╕ рд╕реНрдЯреИрдХ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рд▓реИрдореНрдмрдбрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдХреЗрд╡рд▓ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ - apply() ред рдФрд░ рд╡рд╣ рд╕рдм рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╡рд┐рдзрд┐ рдХреЛ рд╣реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


рд▓реЗрдХрд┐рди рдЧрддрд┐ рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЧрддрд┐ рдХреЛ рдорд╛рдкреЗрдВ


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


рдкрд░реАрдХреНрд╖рдг рдкреИрд░рд╛рдореАрдЯрд░:


 @BenchmarkMode({Mode.Throughput, Mode.AverageTime}) @Warmup(iterations = 5, time = 1000, timeUnit = TimeUnit.MILLISECONDS) @Measurement(iterations = 10, time = 1000, timeUnit = TimeUnit.MILLISECONDS) 

рдЯреЗрд╕реНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ GitHub рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд░реБрдЪрд┐ рд╣реЛ рддреЛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдПрдВред


Oracle JDK 11.0.2 рдФрд░ JMH 1.21 рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо (рд╕рдВрдЦреНрдпрд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдЙрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ):


рдЯреЗрд╕реНрдЯ - рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдереНрд░реВрдкреБрдЯ (ops / us)рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп (рд╣рдореЗрдВ / рд╕реЗрд╢рди)
LambdaGetTest720.0118
ReflectionGetTest650.0177
DirectMethodGetTest2600.0048
рдЯреЗрд╕реНрдЯ - рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдереНрд░реВрдкреБрдЯ (ops / us)рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп (рд╣рдореЗрдВ / рд╕реЗ
LambdaSetTest960.0092
ReflectionSetTest580.0173
DirectMethodSetTest4150.0031

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


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


рдХреЗ рдЙрдкрдпреЛрдЧ


@Subscribe рд╕рдВрд╕реНрдХрд░рдг 7 рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдпреВрдЖрдИ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ, рдЖрдк рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ "рд╕рд╛рдЗрди" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Subscribe рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ LambdaMetafactory рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ LambdaMetafactory , рд╢реНрд░реЛрддрд╛ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдкрд╣рд▓реЗ рдХреЙрд▓ рдкрд░ рдмрдирд╛рдП рдФрд░ рдХреИрд╢ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


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


 public class OrderEdit extends AbstractEditor<Order> { @Inject private CollectionDatasource<OrderLine, UUID> linesDs; @Override public void init( Map<String, Object> params) { linesDs.addCollectionChangeListener(e -> calculateAmount()); } ... } 

рдФрд░ CUBA 7 рдореЗрдВ, рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 public class OrderEdit extends StandardEditor<Order> { @Subscribe(id = "linesDc", target = Target.DATA_CONTAINER) protected void onOrderLinesDcCollectionChange (CollectionChangeEvent<OrderLine> event) { calculateAmount(); } ... } 

рдиреАрдЪреЗ рдкрдВрдХреНрддрд┐: рдХреЛрдб рдХреНрд▓реАрдирд░ рд╣реИ рдФрд░ рдХреЛрдИ рдЬрд╛рджреВ init() рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдлреЙрд░реНрдо рдХреА рдмрдврд╝рддреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдмрдврд╝рдиреЗ рдФрд░ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА - рд╣рдореЗрдВ рдЙрд╕ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝реАрд▓реНрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд░рд╣реЗ рд╣реИрдВ, CUBA рдХреЛ рдпрд╣ рдШрдЯрдХ рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдорд┐рд▓реЗрдЧрд╛ред


рдирд┐рд╖реНрдХрд░реНрд╖


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


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


рдХреБрдЫ рдФрд░ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
рдЬрд╛рд╡рд╛ рдкрд░рд╛рд╡рд░реНрддрди рдХрд╛ рдПрдХ рддреЗрдЬрд╝ рд╡рд┐рдХрд▓реНрдк
рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рд╣реИрдХ рдХрд░рдирд╛
рдЬрд╛рд╡рд╛ рдореЗрдВ рдореЗрдердб рд╣реИрдВрдбрд▓
рдЬрд╛рд╡рд╛ рдкрд░рд╛рд╡рд░реНрддрди, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рддреЗрдЬ
рд▓реИрдВрдмрдбрд╛рдореИрдЯреИрдлреИрдХреНрдЯрд┐рдХ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбреИрдВрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 10% рдзреАрдорд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЧреИрд░-рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдереИрдВрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 80% рддреЗрдЬ рд╣реИ?
рдЯреВ рдлрд╛рд╕реНрдЯ, рдЯреВ рдореЗрдЧрд╛рдореЙрд░реНрдлрд┐рдХ: рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ?

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


All Articles