OpenJDK рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдирдпрд╛
рд╢реЛрдз рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ рдЬреЛ рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдирдП рд╕реБрдзрд╛рд░ рдХрд┐рдП рдЧрдП рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рдорд┐рдХрдХрд░рдг 1.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд▓рдЧрднрдЧ рдЙрд╕реА рдХреНрд╖рдг рд╕реЗ рдЬрдм рдпрд╣ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред рдПрдХ рдУрд░, рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ java.io.Serializable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдмрдирд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рднреА рд╕рд░рд▓рддрд╛ рдЙрди рдкреНрд░рдореБрдЦ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрди рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдХрд╛рд░рдг рдЬрд╛рд╡рд╛ рдХреЛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЗрддрдиреА рдмрдбрд╝реА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдорд┐рд▓реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдЖрдкрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХреАрдХрд░рдг рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╕рд╣рд╛рдпрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИрдВ, рдЙрдирдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдХрдо рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдордВрдЪ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИрдВред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рд╣рдо рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ:
- рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рдФрд░ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди) рднрд╛рд╖рд╛ рддрдВрддреНрд░ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдлреАрд▓реНрдб рдПрдХреНрд╕реЗрд╕ рдореЛрдбрд┐рдлрд╛рдпрд░реНрд╕ (рдирд┐рдЬреА, рд╕рдВрд░рдХреНрд╖рд┐рдд) рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЗрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЕрд╡реИрдз рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреА рднреЗрджреНрдпрддрд╛ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡реЗ deserialization рдХреЗ рджреМрд░рд╛рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдирд┐рдЧрд▓ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдХреНрд░рдорд┐рдХ рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░ рд╕реНрд╡рдпрдВ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрд╛ рдЖрдк рдЗрд╕реЗ readObject, writeObject, readResolve, рдЖрджрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рд╕реЗ рд╕реАрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдХреНрд░рдорд┐рдХрдХрд░рдг рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рддрдВрддреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд░рдорд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рд╣реЗрдВред
- Serialization рдЬреЛрд░рджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ / рдбреАрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдорд╛рдирдХ рдПрдХ рд╕реЗ рдЕрд▓рдЧ рдПрдХ рдореЗрдВ рдмрджрд▓рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдорд╛рдирдХ рдкреНрд░рд╛рд░реВрдк рди рддреЛ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рди рд╣реА рдХреБрд╢рд▓ рд╣реИ, рди рд╣реА рдорд╛рдирд╡-рдкрдардиреАрдп рд╣реИред
рдЬрд╛рд╡рд╛ рдореЗрдВ рдореМрдЬреВрджрд╛ рдХреНрд░рдорд╛рдВрдХрди рдХреА рдореВрд▓рднреВрдд рдЧрд▓рддреА рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП "рдЕрджреГрд╢реНрдп" рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╕ java.io.Serializable рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рджреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ deconstructing рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдирд┐рд░реНрдорд╛рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпреЗ рдирд┐рд░реНрдорд╛рдг рднрд╛рд╖рд╛ рд╕реНрддрд░ рдкрд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрдиреНрд╣реЗрдВ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдкрд╣реБрдВрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд░рддрд┐рдмрд┐рдВрдм рдирд╣реАрдВред
рдПрдХ рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рддреНрд░реБрдЯрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╣ рдЦреБрдж рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдордирдорд╛рдиреЗ рдЧреНрд░рд╛рдл (рдЬрд┐рд╕рдореЗрдВ рд▓реВрдк рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреА рд╣реИ) рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рдо рд╕реЗрдЯ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд░рд╛рдЬреНрдп рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд╕реЗ рдорд┐рдЯрд╛ рджреЗрддреА рд╣реИред
рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреНрд░рд╛рдл рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░рдХреЗ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдбреЗрдЯрд╛ рдЯреНрд░реА рдЬрд┐рд╕рдореЗрдВ рдкрд╣рдЪрд╛рди рдХреА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА (рдЬреИрд╕рд╛ рдХрд┐ JSON рдореЗрдВ рд╣реИ)ред
рдХреНрд░рдорд╛рдВрдХрди рдХреИрд╕реЗ рдХрд░реЗрдВ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд░реНрдЬрдирд┐рдВрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ? рдпрд╣
рдЕрдВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
, рдПрдиреЛрдЯреЗрд╢рди рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рднрд╛рд╖рд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрднреА рддрдХ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ:
рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
public class Range { int lo; int hi; private Range(int lo, int hi) { if (lo > hi) throw new IllegalArgumentException(String.format("(%d,%d)", lo, hi)); this.lo = lo; this.hi = hi; } @Serializer public pattern Range(int lo, int hi) { lo = this.lo; hi = this.hi; } @Deserializer public static Range make(int lo, int hi) { return new Range(lo, hi); } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╢реНрд░реЗрдгреА рд╡рд░реНрдЧ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╡рд░реНрдЧ рдХреЗ рджреЛ рд╡рд┐рд╢реЗрд╖ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ: рдПрдХ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдФрд░ @Serializer рдФрд░ @Deserializer рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд deserializerред рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛ рдкреИрдЯрд░реНрди рдХреЗ рдбрд┐рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЬрд╝рд┐рд░реЗрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдШрдЯрди рдХреЗ рджреМрд░рд╛рди, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣рд╛рдп> = рд▓реЛ рдХреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХреЛрдИ рдЬрд╛рджреВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдврд╛рдВрдЪрд╛ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реА рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рднреА рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдмрд╛рдЗрдирд░реА, рдПрдХреНрд╕рдПрдордПрд▓, рдЬреЗрдПрд╕рдПрди, рдПрдЪрд╕реАрдПрдордПрд▓, рдЖрджрд┐)ред
рдЪреВрдВрдХрд┐ рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдФрд░ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝рд░ рдЖрдо рддрд░реАрдХреЗ рд╣реИрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╣реБрдд рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЪреБрди рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХреНрдбрд▓рд┐рд╕реНрдЯ рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рдирд┐рд░рдВрддрд░ рд╕рд░рдгреА рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рд╕рд░рд▓, рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдФрд░ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдмрдирд╛ рджреЗрдЧрд╛ред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг @Serializer рдФрд░ @Deserializer рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
class C { int a; int b; int c; @Deserializer(version = 3) public C(int a, int b, int c) { this a = a; this.b = b; this.c = c; } @Deserializer(version = 2) public C(int a, int b) { this(a, b, 0); } @Deserializer(version = 1) public C(int a) { this(a, 0, 0); } @Serializer(version = 3) public pattern C(int a, int b, int c) { a = this.a; b = this.b; c = this.c; } }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреАрди рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝рд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХреЛрдВ рдФрд░ deserializers рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд┐рдЬреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдорд╛рдВрдХрди рдврд╛рдВрдЪрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдб рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреИрдХреЗрдЬ рдЧрд╣рди рдЪрд┐рдВрддрдирд╢реАрд▓ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдФрд░ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ: рдЦреБрд▓реЗ рд╡рд░реНрдЧ рдХреЗ рд╕рджрд╕реНрдпред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
class Foo { private final InternalState is; public Foo(ExternalState es) { this(new InternalState(es)); } @Deserializer private open Foo(InternalState is) { this.is = is; } @Serializer private open pattern serialize(InternalState is) { is = this.is; } }
рдпрд╣рд╛рдВ, рд╕реАрд░рд┐рдпрд▓рдПрдЬрд░ рдФрд░ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ рдУрдкрди рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдирдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреБрд░рд╛рдиреЗ рд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ: рдЗрд╕рдореЗрдВ, рд╡рд░реНрдЧреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЛ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░рдорд╛рдВрдХрди рдХреЛ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдХреНрд░рдорд╛рдВрдХрди рдврд╛рдВрдЪреЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред
PS рдлреНрд░реЗрдВрдбреНрд╕, рдЕрдЧрд░ рдЖрдк рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдРрд╕реА рд╣реА рдФрд░ рдЦрдмрд░реЗрдВ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ
рдореЗрд░реЗ рдЪреИрдирд▓ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░реЗрдВред