рдЬрд╛рд╡рд╛ рдПрдиреЛрдЯреЗрд╢рдВрд╕, рднрд╛рдЧ I

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

рдореИрдВ рдСрдирд▓рд╛рдЗрди рдЬрд╛рд╡рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реВрдВ рдФрд░ рдЬрд╛рд╡рд╛ рдХреЛрд░ рдХреЛрд░реНрд╕ рдХреЗ рд░реАрдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ рдСрдирд▓рд╛рдЗрди рд╢рд┐рдХреНрд╖рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо udemy.com (рдХреМрд░рд╕реЗрд░рд╛ / рдПрдбрдПрдХреНрд╕ рдХреЗ рд╕рдорд╛рди) рдкрд░ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдХрд╛рд▓рд╛ рднреА рд╕рд┐рдЦрд╛рддрд╛ рд╣реВрдВред

рдореЗрд░реА рд╢рд┐рдХреНрд╖рдг рдкрджреНрдзрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ
  1. рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрдврд╝рддреЗ рдХреНрд░рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг
  2. рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ
  3. рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рддрд░реНрдХ (рдЬрд╣рд╛рдБ рддрдХ рд╕рдВрднрд╡ рд╣реЛ) рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВ
  4. рдореИрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг (50-100) рдХреЛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрддрд╛ рд╣реВрдВ
  5. рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рджреЗрддрд╛ рд╣реВрдВ

рдпрд╣ рд▓реЗрдЦ рдкреИрд░рд╛рдЧреНрд░рд╛рдл # 1 (рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЕрдиреБрдХреНрд░рдо) рдФрд░ # 2 (рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ) рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИред

рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!


рдХреЗрд╕ рд╕реНрдЯрдбреА: "рд╡рд░реНрдЧ рд╕рдВрд╕реНрдХрд░рдг" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдХреНрд╖рд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

Iteration # 1:
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рдордиреЗ @ рдбрд╛рд▓рд╛ред
public @interface Version {} 


Iteration # 2:
рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
 public @interface Version { public int version(); } 

рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рднрд░реЗрдВ
 @Version(version = 42) public class MyClass {} 

рдЙрдкрд░реЛрдХреНрдд рд╕рд╛рд░рд╛рдВрд╢ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗ рдмрд┐рдирд╛) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИ: рд╕реНрдХреЛрдк рдореЙрдбрд┐рдлрд╝рд╛рдпрд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдорддрд▓рдм рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ (рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдирд╣реАрдВ)ред
 public @interface Version { int version(); } 

рд╕рдВрд░рдХреНрд╖рд┐рдд рдФрд░ рдирд┐рдЬреА рдХреЗ рд╕рд╛рде - рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ
 public @interface Version { protected int version(); } >> COMPILATION ERROR: Modifier 'protected' not allowed here 

рдЖрдЧреЗ рдореИрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛

Iteration # 3:
рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╛рдорд┐рдд рдореВрд▓реНрдп рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
 public @interface Version { public int value(); } 

 @Version(42) public class MyClass {} 

рдпрджреНрдпрдкрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ
 @Version(value = 42) public class MyClass {} 


Iteration # 4:
рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 public @interface Version { int value(); String author() default "UNKNOWN"; } 

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВред рдЗрддрдирд╛
 @Version(42) public class MyClass {} 

рдпрд╛ рдРрд╕реЗ рд╣реА
 @Version(value = 42, author = "Jim Smith") public class MyClass { } 

рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ (рд╕реБрдиреЛ, рдЕрдкрдорд╛рдирдЬрдирдХ, рд╣рд╛рдБ)
 @Version(42, author = "Jim Smith") public class MyClass {} >> COMPILATION ERROR: Annotation attribute must be of the form 'name=value' 


Iteration # 5:
рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
 public @interface Author { String[] value() default {}; } 

 @Author({"Anna", "Mike", "Sara"}) public class MyClass {} 

рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ-рдЖрдпрд╛рдореА
 public @interface Author2D { String[][] value() default {}; } >> COMPILATION ERROR: Invalid type of annotation member 


Iteration # 6:
рдордЬреЗрджрд╛рд░ рдЪрд╛рд▓ рд╕рдВрднрд╡: рдПрдиреЛрдЯреЗрд╢рди - рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛
 public @interface Version { int value(); String author() default "UNKNOWN"; } 

 public @interface History { Version[] value() default {}; } 

рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛
 @History({ @Version(1), @Version(value = 2, author = "Jim Smith") }) public class MyClass {} 


рдПрдиреЛрдЯреЗрд╢рди рдХреА рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред

рдмрд╛рдзрд╛: рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░


1. рдЧреБрдг рдХреЗрд╡рд▓ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдареАрдХ рд╣реИ, рддреЛ рдЪрд▓реЛ рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ

Iteration # 7:
рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк "рдирд┐рдпрдорд┐рдд" рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ (java.lang.String рдФрд░ java.lang.Class рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, java.util.Date рдХрд╛ рдХрд╣рдирд╛ рд╣реИ
 import java.util.Date; public @interface Version { Date date(); } >> COMPILATION ERROR: Invalid type for annotation member 

рд▓реЗрдХрд┐рди рдЖрдк рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдиреЛрдЯреНрд╕ / рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
 public @interface Date { int day(); int month(); int year(); } 

 public @interface Version { Date date(); } 

 @Date(year = 2001, month = 1, day = 1) public class MyClass {} 


Iteration # 8:
рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдирдо рд╣реЛ рд╕рдХрддреА рд╣реИред рд╕реБрдЦрдж рд╕реЗ, рдпрд╣ рдПрдиреЛрдЯреЗрд╢рди рдШреЛрд╖рдгрд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдПрдирдо, рд╡рд░реНрдЧ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдПрдиреЛрдЯреЗрд╢рди рдШреЛрд╖рдгрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
 public @interface Colored { public enum Color {RED, GREEN, BLUE} Color value(); } 

 import static net.golovach.Colored.Color.RED; @Colored(RED) public class MyClass {} 


Iteration # 9:
рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдПрдХ рд╡рд░реНрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рдХрдХреНрд╖рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИред
 public @interface Version { int value(); Class<?> previous() default Void.class; } 

рдХрдХреНрд╖рд╛ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг
 @Version(1) public class ClassVer1 {} 

рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рджреВрд╕рд░рд╛ рд╕рдВрд╕реНрдХрд░рдг
 @Version(value = 2, previous = ClassVer1.class) public class ClassVer2 {} 

// рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд▓реЛрдЧ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рд╡рд░реНрдЧ рдирд╛рдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрднреНрдпрд╛рд╕ рдХреЗ рдЕрдиреБрд░реВрдк рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рдХрд┐рддрдирд╛ рдЙрдмрд╛рдК рд╣реИ?

Iteration # 10:
рдПрдХ рд╡рд░реНрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдо рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг, рдЬрд╣рд╛рдВ рдореИрдВ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдФрд░ рдЬреЗрдирд░рд┐рдХ рдЬреЛрдбрд╝рд╛ред
"рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ" рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд╣ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЯреА рд╕реЗ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ
 import java.io.IOException; import java.io.OutputStream; public interface Serializer<T> { void toStream(T obj, OutputStream out) throws IOException; } 

рдорд╛рдпрдХреНрд▓рд╛рд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ"
 import java.io.IOException; import java.io.OutputStream; public class MySerializer implements Serializer<MyClass> { @Override public void toStream(MyClass obj, OutputStream out) throws IOException { throw new UnsupportedOperationException(); } } 

рд╡рд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП "рдХреНрд░рдордмрджреНрдз" рдЧреЛрдВрдж рдХрд░рддреЗ рд╣реИрдВ
 public @interface SerializedBy { Class<? extends Serializer> value(); } 

рдЦреИрд░, MyClass рд╡рд░реНрдЧ рдиреЗ "рдЗрд╕рдХреЗ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ" MySerializer рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛
 @SerializedBy(MySerializer.class) public class MyClass {} 


Iteration # 11:
рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг
 public enum JobTitle { JUNIOR, MIDDLE, SENIOR, LEAD, UNKNOWN } 

 public @interface Author { String value(); JobTitle title() default JobTitle.UNKNOWN; } 

 public @interface Date { int day(); int month(); int year(); } 

 public @interface Version { int version(); Date date(); Author[] authors() default {}; Class<?> previous() default Void.class; } 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ
 import static net.golovach.JobTitle.*; @History({ @Version( version = 1, date = @Date(year = 2001, month = 1, day = 1)), @Version( version = 2, date = @Date(year = 2002, month = 2, day = 2), authors = {@Author(value = "Jim Smith", title = JUNIOR)}, previous = MyClassVer1.class), @Version( version = 3, date = @Date(year = 2003, month = 3, day = 3), authors = { @Author(value = "Jim Smith", title = MIDDLE), @Author(value = "Anna Lea")}, previous = MyClassVer2.class) }) public class MyClassVer3 {} 


рдкреНрд░рддрд┐рдмрдВрдз: рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди JVM рд╕рдВрдХрд▓рди / рд▓реЛрдб рд╕рдордп рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ


рдЬрд┐рд╕ рд╕рдордп рдХрдХреНрд╖рд╛ рдХреЛ JVM рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдпрд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рд╕рдордп рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
 public @interface SomeAnnotation { int count(); String name(); } 

рдЙрджрд╛рд╣рд░рдг
 @SomeAnnotation( count = 1 + 2, name = MyClass.STR + "Hello" ) public class MyClass { public static final String STR = "ABC"; } 

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг
 @SomeAnnotation( count = (int) Math.PI, name = "" + Math.PI ) public class MyClass {} 

рд▓реЗрдХрд┐рди рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо рд╣реИрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд╖рд┐рджреНрдз рд╣реИ
 @SomeAnnotation( count = (int) Math.sin(1), name = "Hello!".toUpperCase() ) public class MyClass {} >> COMPILATION ERROR: Attribute value must be constant 


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


рдпрд╣ рдЬрд╛рд╡рд╛ рдореЗрдВ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╣реИред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:


рд╕рдВрдкрд░реНрдХ рд╡рд┐рд╡рд░рдг



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

рд╕реНрдХрд╛рдЗрдк: рдЧреЛрд▓реЛрд╡рдЪрдХреНрд░реНрд╕
рдИрдореЗрд▓: GolovachCourses@gmail.com

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


All Articles