рдЪреАрдЬреЗрдВ рдЖрдк [рд╢рд╛рдпрдж] рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдереЗ

рдЕрднрд┐рд╡рд╛рджрди, рдкрд╛рдардХ!


рдпрд╣ рд▓реЗрдЦ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдЪреЗрддрдирд╛ рдХреА рдзрд╛рд░рд╛ рдХреЛ рдкрддрд▓рд╛ рдХрд░реЗрдЧрд╛ред рдЖрдЗрдП рдЬрд╛рд╡рд╛ рдФрд░ рдЖрдкрдХреЗ рдЖрд╕-рдкрд╛рд╕ рдРрд╕реА рдордЬрд╝реЗрджрд╛рд░ рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдЬрд╛рдирддреЗред рдореИрдВрдиреЗ рдЦреБрдж рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд╛рдардХ рдХрдо рд╕реЗ рдХрдо рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖рдг рдкрд╛рдПрдВрдЧреЗред


рдореБрдЦрд░ 2 рддрд░реНрдХ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ


рдЖрдорддреМрд░ рдкрд░, assert рдЙрдкрдпреЛрдЧ рдХреБрдЫ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ AssertionError рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рдЪреЗрдХ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 assert list.isEmpty(); 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:


 assert list.isEmpty() : list.toString(); 

рд╕реНрдорд╛рд░реНрдЯ рд░реАрдбрд░ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓рд┐рдпрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рд╕рдВрдпреЛрдЧрд╡рд╢, рдпрд╣ рдЖрд▓рд╕реА рд╣реИ) рдЯрд╛рдЗрдк Object рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ AssertionError рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ: https://docs.oracle.com/javase/specs/jls/se13/html/jls-14.html#jls-14.10


рдЬрд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рдЧрднрдЧ рд╕рд╛рдврд╝реЗ 6 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ assert рдХреАрд╡рд░реНрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдЙрдкрдпреЛрдЧ рджреЗрдЦрд╛ рд╣реИред


strictfp


рдпрд╣ рдПрдХ рдЕрднрд┐рд╢рд╛рдк рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдПрдХ рдЕрд▓реНрдкрдЬреНрдЮрд╛рдд рдЦреЛрдЬрд╢рдмреНрдж рд╣реИред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдЕрдВрдХрдЧрдгрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


 public interface NonStrict { float sum(float a, float b); } 

рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ


 public strictfp interface Strict { float sum(float a, float b); } 

рд╕рд╛рде рд╣реА, рдЗрд╕ рдХреАрд╡рд░реНрдб рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 public interface Mixed { float sum(float a, float b); strictfp float strictSum(float a, float b); } 

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


рдЬрд╛рд░реА рд░рдЦрдирд╛ рдПрдХ рддрд░реНрдХ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ


рдореБрдЭреЗ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ред рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:


 for (Item item : items) { if (item == null) { continue; } use(item); } 

рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрд░реНрде рд╣реИ рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдЧрд▓реЗ рдкрд╛рд╕ рдХреА рд╡рд╛рдкрд╕реАред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 loop: for (Item item : items) { if (item == null) { continue loop; } use(item); } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣реНрдп рдЪрдХреНрд░ рдкрд░ рд▓реМрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ:


 @Test void test() { outer: for (int i = 0; i < 20; i++) { for (int j = 10; j < 15; j++) { if (j == 13) { continue outer; } } } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ outer рдмрд┐рдВрджреБ рдкрд░ рд▓реМрдЯрдиреЗ рдкрд░ рдХрд╛рдЙрдВрдЯрд░ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реВрдк рдкрд░рд┐рдорд┐рдд рд╣реЛрддрд╛ рд╣реИред


рдЬрдм рдХреЛрдИ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд╡рд╛рд░реНрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ


рдЬрдм рд╣рдо рдмрд╛рд╣рд░ рд╕реЗ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреА рдХреЙрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ:


 @Benchmark public Object invokeVararg() { return vararg(); } 

рд╣рдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рдкрд╛рдП, рдХреНрдпрд╛ рд╣рдордиреЗ? рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЕрдВрджрд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд░рд╕реАрд▓рд╛ рдирд╣реАрдВ рд╣реИ:


 public Object[] vararg(Object... args) { return args; } 

рдЕрдиреБрднрд╡ рдЪрд┐рдВрддрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ:


 Benchmark Mode Cnt Score Error Units invokeVararg avgt 20 3,715 ┬▒ 0,092 ns/op invokeVararg:┬╖gc.alloc.rate.norm avgt 20 16,000 ┬▒ 0,001 B/op invokeVararg:┬╖gc.count avgt 20 257,000 counts 

рдЖрдк null рд╣реЛрдХрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рддрд░реНрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


 @Benchmark public Object invokeVarargWithNull() { return vararg(null); } 

рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ:


 invokeVarargWithNull avgt 20 2,415 ┬▒ 0,067 ns/op invokeVarargWithNull:┬╖gc.alloc.rate.norm avgt 20 тЙИ 10тБ╗тБ╡ B/op invokeVarargWithNull:┬╖gc.count avgt 20 тЙИ 0 counts 

null рд╕рд╛рде рдХреЛрдб рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ, рд╕рдВрдХрд▓рдХ (рдФрд░ рдЖрдЗрдбрд┐рдпрд╛) рд╢рдкрде рд▓реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд░реНрдо рдХреЛрдб рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░реЗрдВред


рд╕реНрд╡рд┐рдЪ-рдХреЗрд╕ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди java.lang.Class рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ


рдпрд╣ рдХреЛрдб рдЕрднреА рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реИ:


 String to(Class<?> clazz) { switch (clazz) { case String.class: return "str"; case Integer.class: return "int"; default: return "obj"; } } 

рдЗрд╕рд╕реЗ рдирд┐рдкрдЯреЛред


рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ Class.isAssignableFrom () рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ


рдПрдХ рдХреЛрдб рд╣реИ:


 int a = 0; Integer b = 10; a = b; //    

рдЕрдм рд╕реЛрдЪреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕ рдореВрд▓реНрдп рдкрд░ рд▓реМрдЯреЗрдЧреА:


 boolean check(Integer b) { return int.class.isAssignableFrom(b.getClass()); } 

Class.isAssignableFrom() рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, Class.isAssignableFrom() рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ int.class.isAssignableFrom(b.getClass()) true рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред рд╣рдо рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЛ int рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рдЪрд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


рд╣рд╛рд▓рд╛рдБрдХрд┐, check() рд╡рд┐рдзрд┐ false рдЖрдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐:


 /** * Determines if the class or interface represented by this * {@code Class} object is either the same as, or is a superclass or * superinterface of, the class or interface represented by the specified * {@code Class} parameter. It returns {@code true} if so; * otherwise it returns {@code false}. If this {@code Class} // <---- !!! * object represents a primitive type, this method returns * {@code true} if the specified {@code Class} parameter is * exactly this {@code Class} object; otherwise it returns * {@code false}. * */ @HotSpotIntrinsicCandidate public native boolean isAssignableFrom(Class<?> cls); 

рд╣рд╛рд▓рд╛рдВрдХрд┐ int Integer (рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ, рд╕рдВрднрд╛рд╡рд┐рдд рдЖрдкрд╕реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рднрд╛рд╖рд╛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧреБрдорд░рд╛рд╣ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЖрд░рдХреНрд╖рдг рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдиреИрддрд┐рдХ: рдЬрдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ - рдмрдкрддрд┐рд╕реНрдорд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдкреНрд░рд▓реЗрдЦрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдПрдХ рдФрд░ рддрдереНрдпрд╣реАрди рддрдереНрдп рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ:


 assert int.class != Integer.class; 

int.class рдХреНрд▓рд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Integer.TYPE , рдФрд░ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдпрд╣ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 Class<?> toClass() { return int.class; } 

Vzhuh:


 toClass()Ljava/lang/Class; L0 LINENUMBER 11 L0 GETSTATIC java/lang/Integer.TYPE : Ljava/lang/Class; ARETURN 

Java.lang.Integer рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдЦреЛрд▓рдирд╛ java.lang.Integer рд╣рдо рдЗрд╕реЗ рджреЗрдЦреЗрдВрдЧреЗ:


 @SuppressWarnings("unchecked") public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int"); 

Class.getPrimitiveClass("int") рдкрд░ рдХреЙрд▓ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП Class.getPrimitiveClass("int") рдЗрд╕реЗ рдХрд╛рдЯрдиреЗ рдФрд░ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 @SuppressWarnings("unchecked") public static final Class<Integer> TYPE = int.class; 

рд╕рдмрд╕реЗ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ (рд╕рднреА рдкреНрд░рд╛рдЗрдореЗрдЯреАрдЬрд╝ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рд╛рде JDK рдЗрдХрдЯреНрдард╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╢реБрд░реВ рд╣реЛрдЧреАред рд╕рдЪ рд╣реИ, рд╡рд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА:


 java.lang.IllegalArgumentException: Component type is null at jdk.internal.misc.Unsafe.allocateUninitializedArray(java.base/Unsafe.java:1379) at java.lang.StringConcatHelper.newArray(java.base/StringConcatHelper.java:458) at java.lang.StringConcatHelper.simpleConcat(java.base/StringConcatHelper.java:423) at java.lang.String.concat(java.base/String.java:1968) at jdk.internal.util.SystemProps.fillI18nProps(java.base/SystemProps.java:165) at jdk.internal.util.SystemProps.initProperties(java.base/SystemProps.java:103) at java.lang.System.initPhase1(java.base/System.java:2002) 

рддреНрд░реБрдЯрд┐ рдпрд╣рд╛рдБ рдХреНрд░реЙрд▓ рдХрд░рддреА рд╣реИ:


 class java.lang.StringConcatHelper { @ForceInline static byte[] newArray(long indexCoder) { byte coder = (byte)(indexCoder >> 32); int index = (int)indexCoder; return (byte[]) UNSAFE.allocateUninitializedArray(byte.class, index << coder); //<-- } } 

рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде, byte.class рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред


рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рднрдВрдбрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реИ


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


 @Entity public class SimpleEntity { @Id private Integer id; @Column private String name; } public interface SimpleRepository extends JpaRepository<SimpleEntity, Integer> { } 

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


 public interface SimpleRepository extends JpaRepository<SimpleEntity, Integer> { @Query(", ,  ?") Optional<SimpleEntity> findLesserOfTwoEvils(); } 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рднреА рд╣рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рдХреБрдВрдЬреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рднрдВрдбрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ:


 public interface SimpleRepository extends JpaRepository<SimpleEntity, Long> { } 

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


 IllegalArgumentException: Provided id of the wrong type for class SimpleEntity. Expected: class java.lang.Integer, got class java.lang.Long 

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рджрд┐рдирд╛рдВрдХ рдЗрдХрд╛рдИ рдХреБрдВрдЬреА рдФрд░ рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдХреБрдВрдЬреА рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рдЬреАрд╡рди рд╕реЗ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╣реА рдХреБрдВрдЬреА рдкреНрд░рдХрд╛рд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдХреА рдЕрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг: https://hibernate.atlassian.net/browse/HHH-10690


рдореЗрд░реЗ рдЬреАрд╡рди рдореЗрдВ рдореБрдЭреЗ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдорд┐рд▓рд╛: рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯреНрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ (рдЯреНрд░реЙрд▓реА) рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, org.springframework.data.jpa.repository.query.PartTreeJpaQueryIntegrationTests$UserRepository Long рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ Integer , рдФрд░ User рдЗрдХрд╛рдИ рдореЗрдВ Integer рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!


рдпрд╣ рд╕рдм, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдереАред


рдореИрдВ рдЖрдкрдХреЛ рдирдП рд╕рд╛рд▓ рдХреА рдмрдзрд╛рдИ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЛ рдЧрд╣рд░реА рдФрд░ рд╡реНрдпрд╛рдкрдХ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

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


All Articles