{"id":303846,"date":"2020-05-19T09:00:51","date_gmt":"2020-05-19T09:00:51","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=303846"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=303846","title":{"rendered":"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 enum \u0427\u0430\u0441\u0442\u044c\u00a0II"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/501870\/\"><nobr><a href=\"https:\/\/habr.com\/ru\/post\/483392\/\"><b>\u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/b><\/a>&nbsp;|&nbsp;<b>\u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/b><\/nobr>  <\/p>\n<hr>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438.<br \/>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043d\u0430 \u043d\u0430\u0448\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c IDE, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 JVM.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h1>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h1>\n<p>  \u2003\u2003<a href=\"#Tools\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/a><br \/>  \u2003\u2003<a href=\"#Javac\">Javac<\/a><br \/>  \u2003\u2003<a href=\"#ExtractMethod\">Extract method<\/a><br \/>  \u2003\u2003<a href=\"#ConDy\">Dynamic Class-File Constants<\/a><br \/>  \u2003\u2003\u2003\u2003<a href=\"#Surprise\">\u0412\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438<\/a><br \/>  \u2003\u2003\u2003\u2003<a href=\"#Future\">\u0421\u0432\u0435\u0442\u043b\u043e\u0435 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/a><br \/>  \u2003\u2003<a href=\"#Unsafe\">Unsafe<\/a><br \/>  \u2003\u2003<a href=\"#Testing\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/a><br \/>  \u2003\u2003\u2003\u2003<a href=\"#JavacSwitchTranslation\">Javac \u0438 switch<\/a><br \/>  \u2003\u2003<a href=\"#Conclusion\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><br \/>  \u2003\u2003<a href=\"#Appendix\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/a><\/p>\n<p>  <a name=\"Tools\"><\/a>  <\/p>\n<h1>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/h1>\n<p>  Javac \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043e \u043d\u0430\u0441: <a href=\"https:\/\/bugs.openjdk.java.net\/browse\/JDK-7144981\" rel=\"nofollow\">\u0432\u044b\u0440\u0435\u0437\u0430\u0435\u0442 \u0438\u0437 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0435\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u044b<\/a> \u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 <code>java.lang.Enum<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/wiki.openjdk.java.net\/display\/CodeTools\/asmtools\" rel=\"nofollow\">asmtools<\/a> \u2014 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0434\u043b\u044f JVM, \u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c class-\u0444\u0430\u0439\u043b\u044b \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/asm.ow2.io\/\" rel=\"nofollow\">ASM<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0443\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 java-\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435.<\/p>\n<p>  <a name=\"Javac\"><\/a>  <\/p>\n<h1>Javac<\/h1>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0439 \u0431\u0435\u0437 \u0443\u0445\u0438\u0449\u0440\u0435\u043d\u0438\u0439, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043b\u0438\u0448\u044c <code>javac<\/code>. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 javac \u043d\u0435 \u043e\u0442\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c <i>\u044d\u0442\u043e<\/i> \u0441 \u0440\u0443\u0433\u0430\u043d\u044c\u044e \u00abcode too large\u00bb.<\/p>\n<p>  \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e, \u0435\u0449\u0451 \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d Java 1.7 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0434\u0435\u0440\u0436\u0430\u043b\u043e\u0441\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 2_746 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u043e \u0433\u0434\u0435-\u0442\u043e \u043f\u043e\u0441\u043b\u0435 Java 11 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0443\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u043d\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u0434\u043e 2_743. \u0414\u0430-\u0434\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437-\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0443\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442!<\/p>\n<p>  \u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u043b\u0443\u0447\u0448\u0435\u0435 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <a name=\"ExtractMethod\"><\/a>  <\/p>\n<h1>Extract method<\/h1>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0438\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439.<\/p>\n<p>  \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043a\u0430\u043a \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>FizzBuzz<\/code> \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">static {}<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">static  {     Fizz = new FizzBuzz(&quot;Fizz&quot;, 0);     \/\/  0: new           #2                  \/\/ class FizzBuzz     \/\/  3: dup     \/\/  4: ldc           #22                 \/\/ String Fizz     \/\/  6: iconst_0     \/\/  7: invokespecial #24                 \/\/ Method &quot;&lt;init&gt;&quot;:(Ljava\/lang\/String;I)V     \/\/ 10: putstatic     #25                 \/\/ Field Fizz:LFizzBuzz;     Buzz = new FizzBuzz(&quot;Buzz&quot;, 1);     \/\/ 13: new           #2                  \/\/ class FizzBuzz     \/\/ 16: dup     \/\/ 17: ldc           #28                 \/\/ String Buzz     \/\/ 19: iconst_1     \/\/ 20: invokespecial #24                 \/\/ Method &quot;&lt;init&gt;&quot;:(Ljava\/lang\/String;I)V     \/\/ 23: putstatic     #30                 \/\/ Field Buzz:LFizzBuzz;     FizzBuzz = new FizzBuzz(&quot;FizzBuzz&quot;, 2);     \/\/ 26: new           #2                  \/\/ class FizzBuzz     \/\/ 29: dup     \/\/ 30: ldc           #32                 \/\/ String FizzBuzz     \/\/ 32: iconst_2     \/\/ 33: invokespecial #24                 \/\/ Method &quot;&lt;init&gt;&quot;:(Ljava\/lang\/String;I)V     \/\/ 36: putstatic     #33                 \/\/ Field FizzBuzz:LFizzBuzz;      $VALUES = new FizzBuzz[] {     \/\/ 39: iconst_3     \/\/ 40: anewarray     #2                  \/\/ class FizzBuzz         Fizz,      \/\/ 43: dup     \/\/ 44: iconst_0     \/\/ 45: getstatic     #25                 \/\/ Field Fizz:LFizzBuzz;     \/\/ 48: aastore         Buzz,      \/\/ 49: dup     \/\/ 50: iconst_1     \/\/ 51: getstatic     #30                 \/\/ Field Buzz:LFizzBuzz;     \/\/ 54: aastore         FizzBuzz     \/\/ 55: dup     \/\/ 56: iconst_2     \/\/ 57: getstatic     #33                 \/\/ Field FizzBuzz:LFizzBuzz;     \/\/ 60: aastore     };     \/\/ 61: putstatic     #1                  \/\/ Field $VALUES:[LFizzBuzz;     \/\/ 64: return } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u043c \u2014 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>$VALUES<\/code> \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"java\">$VALUES = createValues(); <\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0432\u0438\u0432\u0430\u044f \u044d\u0442\u0443 \u043c\u044b\u0441\u043b\u044c, \u0432 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">static  {     FizzBuzz[] localValues = createValues();      int index = 0;     Fizz = localValues[index++];     Buzz = localValues[index++];     FizzBuzz = localValues[index++];      $VALUES = localValues; }  private static FizzBuzz[] createValues() {     return new FizzBuzz[] {         new FizzBuzz(&quot;Fizz&quot;, 0),          new FizzBuzz(&quot;Buzz&quot;, 1),          new FizzBuzz(&quot;FizzBuzz&quot;, 2)     }; } <\/code><\/pre>\n<p>  \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u0437\u044f\u0442\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441\u0442\u043e\u044f\u0442 \u043f\u043e 6 \u0431\u0430\u0439\u0442\u043e\u0432, \u0447\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u043e \u0434\u043b\u044f \u043d\u0430\u0441. \u0412\u044b\u043d\u0435\u0441\u0435\u043c \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"java\"> private static int valueIndex;  static  {     $VALUES = createValues();      valueIndex = 0;     Fizz = nextValue();     Buzz = nextValue();     FizzBuzz = nextValue(); }  private static FizzBuzz nextValue() {     return $VALUES[valueIndex++]; } <\/code><\/pre>\n<p>  \u041d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e <code>$VALUES<\/code>, <code>valueIndex<\/code> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0445\u043e\u0434\u0438\u0442 11 \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 65_524 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u0435\u0439. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u043e 6 \u0431\u0430\u0439\u0442\u043e\u0432, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 10_920 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u0447\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043a\u0440\u0430\u0442\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 javac \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0437\u0434\u043d\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439!<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430: <a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/blob\/v1.0\/3_HugeEnumGenerator\/src\/main\/java\/com\/maccimo\/hugeenum\/generator\/ExtractMethodHugeEnumGenerator.java\" rel=\"nofollow\">ExtractMethodHugeEnumGenerator.java<\/a><br \/>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430: <a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/blob\/v1.0\/5_Samples\/bin\/ExtractMethodHugeEnum.class\" rel=\"nofollow\">ExtractMethodHugeEnum.class<\/a><br \/>  <a name=\"ConDy\"><\/a>  <\/p>\n<h1>Dynamic Class-File Constants<\/h1>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e <a href=\"https:\/\/openjdk.java.net\/jeps\/309\" rel=\"nofollow\">JEP 309<\/a> \u0438 \u0435\u0433\u043e \u0442\u0430\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 <i>\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/i>.<\/p>\n<p>  \u0421\u0443\u0442\u044c \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u043e\u0432\u0430\u0445:<\/p>\n<p>  \u041a \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0442\u0438\u043f\u0430\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u043f\u0443\u043b\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0435\u0449\u0451 \u043e\u0434\u0438\u043d, <code>CONSTANT_Dynamic<\/code>. \u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0442\u0438\u043f \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043d\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0437\u043e\u0432\u0443 bootstrap-\u043c\u0435\u0442\u043e\u0434\u0430, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0435\u0451 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0421\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u0443\u0436\u0435 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e. \u0427\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0442\u043e\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u043f\u0440\u043e Singleton, \u0442\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435. \u0412 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u043e, \u0447\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0442 \u0438 \u043c\u0435\u0442\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0430. \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 bootstrap-\u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b JVM \u043f\u043e\u0434\u043a\u0438\u043d\u0435\u0442 \u043c\u043e\u043d\u0435\u0442\u043a\u0443 \u0438 \u0432\u044b\u0431\u0435\u0440\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0440\u043e\u043b\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0430 \u043f\u0440\u043e\u0447\u0438\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0436\u0435\u0440\u0442\u0432\u0443 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<blockquote><p>Behaviorally, a CONSTANT_Dynamic constant is resolved by executing its bootstrap method on the following parameters:    <\/p>\n<ol>\n<li>a local Lookup object,<\/li>\n<li>the String representing the name component of the constant,<\/li>\n<li>the Class representing the expected constant type, and<\/li>\n<li>any remaining bootstrap arguments.<\/li>\n<\/ol>\n<p>  As with invokedynamic, multiple threads can race to resolve, but a unique winner will be chosen and any other contending answers discarded.  <\/p><\/blockquote>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>ldc<\/code>, <code>ldc_w<\/code> \u0438 <code>ldc2_w<\/code>. \u0418\u043d\u0442\u0435\u0440\u0435\u0441 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 &mdash; <code>ldc<\/code>. <\/p>\n<p>  \u041e\u043d\u0430, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043f\u0440\u043e\u0447\u0438\u0445, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 255 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u043d\u043e \u0437\u0430\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 \u043d\u0430 1 \u0431\u0430\u0439\u0442 \u043c\u0435\u043d\u044c\u0448\u0435. \u0412\u0441\u0451 \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u0434\u043e 255 \u0431\u0430\u0439\u0442\u043e\u0432 \u0438 <code>255 + ((65_524 - (255 * 5)) \/ 6) = 10_963<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043d\u0435 \u0442\u0430\u043a\u043e\u0439 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u0439, \u043d\u043e \u043e\u043d \u0432\u0441\u0451 \u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p>  \u0412\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u044d\u0442\u0438\u043c\u0438 \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438, \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c.<\/p>\n<p>  \u0412 \u0431\u043b\u043e\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <code>nextValue()<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>ordinal<\/code>, \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e, \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442 \u043f\u043e\u043b\u044f <code>valueIndex<\/code>, \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>nextValue()<\/code> \u0438 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 bootstrap-\u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0432\u0438\u0434 <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/lang\/invoke\/MethodHandle.html\" rel=\"nofollow\">MethodHandle<\/a>, \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>new<\/code> \u0432 Java. \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e method handle \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/lang\/invoke\/MethodHandles.Lookup.html#findConstructor(java.lang.Class,java.lang.invoke.MethodType)\" rel=\"nofollow\">MethodHandles.Lookup::findConstructor()<\/a>, \u043d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0435 \u0437\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e\u0433\u043e method handle \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f JVM.<\/p>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 bootstrap-\u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0433\u043a\u0430 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443. \u041a \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f bootstrap-\u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"java\">private FizzBuzz(MethodHandles.Lookup lookup, String name, Class&lt;?&gt; enumClass, int ordinal) {     super(name, ordinal); } <\/code><\/pre>\n<p>  \u0412 \u0432\u0438\u0434\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">static  {     Fizz = JVM_ldc(FizzBuzz::new, &quot;Fizz&quot;, 0);     Buzz = JVM_ldc(FizzBuzz::new, &quot;Buzz&quot;, 1);     FizzBuzz = JVM_ldc(FizzBuzz::new, &quot;FizzBuzz&quot;, 2);      $VALUES = createValues(); } <\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <code>ldc<\/code> \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u0430 <code>JVM_ldc()<\/code>, \u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0435 \u043d\u0430 \u0438\u0445 \u043c\u0435\u0441\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 JVM.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>$VALUES<\/code> \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443. Bootstrap-\u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c:<\/p>\n<pre><code class=\"java\">private static FizzBuzz[] createValues(MethodHandles.Lookup lookup, String name, Class&lt;?&gt; clazz, FizzBuzz... elements) {     return elements; } <\/code><\/pre>\n<p>  \u0412\u0441\u044f \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0442\u0430\u043c \u043c\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 <code>$VALUES<\/code>:<\/p>\n<blockquote>\n<pre> BootstrapMethods:   ...   1: #54 REF_invokeStatic FizzBuzz.createValues:(Ljava\/lang\/invoke\/MethodHandles$Lookup;Ljava\/lang\/String;Ljava\/lang\/Class;[LFizzBuzz;)[LFizzBuzz;     Method arguments:       #1 #0:Fizz:LFizzBuzz;       #2 #0:Buzz:LFizzBuzz;       #3 #0:FizzBuzz:LFizzBuzz; <\/pre>\n<p>  <\/p><\/blockquote>\n<p>  JVM \u0441\u0444\u0440\u043e\u043c\u0438\u0440\u0443\u0435\u0442 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0435\u0433\u043e \u0432 \u043d\u0430\u0448 bootstrap-\u043c\u0435\u0442\u043e\u0434 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 vararg-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>elements<\/code>. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u2014 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 65_535, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u0430 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0438\u0445 \u043d\u0438 \u0431\u044b\u043b\u043e.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e class-\u0444\u0430\u0439\u043b\u0430, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0442\u043e\u0434 <code>createValues()<\/code> \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u0435\u0449\u0451 \u0438 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0441\u043b\u043e\u0442\u044b \u0432 \u043f\u0443\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<br \/>  \u0418, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u043e.<\/p>\n<p>  <a name=\"Surprise\"><\/a>  <\/p>\n<h1>\u0412\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438<\/h1>\n<p>  <i>\u041a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0433\u0435\u0440\u043e\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0435\u043c, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u043a\u043b\u0430\u0441\u0441\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/i><\/p>\n<p>  \u0412\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0432 \u043e\u0431\u043c\u0435\u043d \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u043d\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 class-\u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 ASM \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0412 \u043d\u0435\u0439 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e, \u043d\u043e \u043d\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u043f\u0435\u0440\u0432\u044b\u0435 255 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u043c \u0434\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u0434\u0440\u0430\u0433\u043e\u0446\u0435\u043d\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d\u044b \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<blockquote>\n<pre> Constant pool:    #1 = Utf8               FizzBuzz    #2 = Class              #1             \/\/ FizzBuzz    #3 = Utf8               java\/lang\/Enum    #4 = Class              #3             \/\/ java\/lang\/Enum    #5 = Utf8               $VALUES    #6 = Utf8               [LFizzBuzz;    #7 = Utf8               valueIndex    #8 = Utf8               I    #9 = Utf8               Fizz   #10 = Utf8               LFizzBuzz;   #11 = Utf8               Buzz   #12 = Utf8               FizzBuzz   #13 = Utf8               values   #14 = Utf8               ()[LFizzBuzz;   #15 = NameAndType        #5:#6          \/\/ $VALUES:[LFizzBuzz;   #16 = Fieldref           #2.#15         \/\/ FizzBuzz.$VALUES:[LFizzBuzz;   #17 = Class              #6             \/\/ &quot;[LFizzBuzz;&quot;   #18 = Utf8               clone   #19 = Utf8               ()Ljava\/lang\/Object;   #20 = NameAndType        #18:#19        \/\/ clone:()Ljava\/lang\/Object;   #21 = Methodref          #17.#20        \/\/ &quot;[LFizzBuzz;&quot;.clone:()Ljava\/lang\/Object;   ...   #40 = NameAndType        #9:#10         \/\/ Fizz:LFizzBuzz;   #41 = Dynamic            #0:#40         \/\/ #0:Fizz:LFizzBuzz;   #42 = Fieldref           #2.#40         \/\/ FizzBuzz.Fizz:LFizzBuzz;   #43 = NameAndType        #11:#10        \/\/ Buzz:LFizzBuzz;   #44 = Dynamic            #0:#43         \/\/ #0:Buzz:LFizzBuzz;   #45 = Fieldref           #2.#43         \/\/ FizzBuzz.Buzz:LFizzBuzz;   #46 = NameAndType        #12:#10        \/\/ FizzBuzz:LFizzBuzz;   #47 = Dynamic            #0:#46         \/\/ #0:FizzBuzz:LFizzBuzz;   #48 = Fieldref           #2.#46         \/\/ FizzBuzz.FizzBuzz:LFizzBuzz; <\/pre>\n<p>  <\/p><\/blockquote>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0435\u0441\u0442\u044c \u043e\u0431\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0443\u0442\u044c \u2014 \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u043e\u0431\u0440\u0430\u0437\u0435\u0446, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0443\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c bootstrap-\u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0442\u0440\u0443\u0434\u043d\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u0424\u043e\u0440\u043c\u0430\u0442 class-\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442 \u0438 \u0435\u0433\u043e \u0440\u0443\u0447\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0434\u043d\u044b\u0439, \u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439.<\/p>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u2014 \u0447\u0451\u0442\u043a\u0438\u0439 \u043f\u043b\u0430\u043d. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u0437 <code>COUNT<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f:  <\/p>\n<ul>\n<li><code>COUNT<\/code> \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f\u0430 <code>CONSTANT_Dynamic<\/code> \u2014 \u043d\u0430\u0448\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/li>\n<li><code>COUNT<\/code> \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f\u0430 <code>CONSTANT_NameAndType<\/code> \u2014 \u043f\u0430\u0440\u044b \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0438\u043c\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0435\u0433\u043e \u0442\u0438\u043f. \u0422\u0438\u043f \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u044d\u0442\u043e \u0442\u0438\u043f \u043a\u043b\u0430\u0441\u0441\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/li>\n<li><code>COUNT<\/code> \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f\u0430 <code>CONSTANT_Utf8<\/code> \u2014 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u0438 \u0438\u043c\u0435\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f<\/li>\n<li><code>COUNT<\/code> \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f\u0430 <code>CONSTANT_Integer<\/code> \u2014 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>ordinal<\/code><\/li>\n<li>\u0438\u043c\u0435\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0441\u043a\u0443\u0447\u043d\u044b\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0443\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043d\u0435\u043c\u0430\u043b\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0443\u043b\u0430 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435, <code>elementNames<\/code> \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0451\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">int elementCount = elementNames.size();  int baseConDy = 1; int baseNameAndType = baseConDy + elementCount; int baseUtf8 = baseNameAndType + elementCount; int baseInteger = baseUtf8 + elementCount; int indexThisClass = baseInteger + elementCount; int indexThisClassUtf8 = indexThisClass + 1; int indexSuperClass = indexThisClassUtf8 + 1; int indexSuperClassUtf8 = indexSuperClass + 1; int indexBootstrapMethodsUtf8 = indexSuperClassUtf8 + 1; int indexConDyDescriptorUtf8 = indexBootstrapMethodsUtf8 + 1; int indexBootstrapMethodHandle = indexConDyDescriptorUtf8 + 1; int indexBootstrapMethodRef = indexBootstrapMethodHandle + 1; int indexBootstrapMethodNameAndType = indexBootstrapMethodRef + 1; int indexBootstrapMethodName = indexBootstrapMethodNameAndType + 1; int indexBootstrapMethodDescriptor = indexBootstrapMethodName + 1;  int constantPoolSize = indexBootstrapMethodDescriptor + 1; <\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c. <\/p>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u2014 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 class-\u0444\u0430\u0439\u043b\u0430, \u0432\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 <nobr><code>0xCA 0xFE 0xBA 0xBE<\/code><\/nobr> \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0444\u0430\u0439\u043b\u0430:<\/p>\n<pre><code class=\"java\">\/\/ Class file header u4(CLASS_FILE_SIGNATURE); u4(version); <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u2014 \u043f\u0443\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0443\u043b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/\/ Constant pool u2(constantPoolSize);  \/\/ N * CONSTANT_Dynamic for (int i = 0; i &lt; elementCount; i++) {     u1u2u2(CONSTANT_Dynamic, i, baseNameAndType + i); }  \/\/ N * CONSTANT_NameAndType for (int i = 0; i &lt; elementCount; i++) {     u1u2u2(CONSTANT_NameAndType, baseUtf8 + i, indexConDyDescriptorUtf8); }  \/\/ N * CONSTANT_Utf8 \/\/noinspection ForLoopReplaceableByForEach for (int i = 0; i &lt; elementCount; i++) {     u1(CONSTANT_Utf8);     utf8(elementNames.get(i)); }  \/\/ N * CONSTANT_Integer for (int i = 0; i &lt; elementCount; i++) {     u1(CONSTANT_Integer);     u4(i); }  \/\/ ThisClass u1(CONSTANT_Class); u2(indexThisClassUtf8);  \/\/ ThisClassUtf8 u1(CONSTANT_Utf8); utf8(enumClassName);  \/\/ SuperClass u1(CONSTANT_Class); u2(indexSuperClassUtf8);  \/\/ SuperClassUtf8 u1(CONSTANT_Utf8); utf8(JAVA_LANG_ENUM);  \/\/ BootstrapMethodsUtf8 u1(CONSTANT_Utf8); utf8(ATTRIBUTE_NAME_BOOTSTRAP_METHODS);  \/\/ ConDyDescriptorUtf8 u1(CONSTANT_Utf8); utf8(binaryEnumClassName);  \/\/ BootstrapMethodHandle u1(CONSTANT_MethodHandle); u1(REF_newInvokeSpecial); u2(indexBootstrapMethodRef);  \/\/ BootstrapMethodRef u1u2u2(CONSTANT_Methodref, indexThisClass, indexBootstrapMethodNameAndType);  \/\/ BootstrapMethodNameAndType u1u2u2(CONSTANT_NameAndType, indexBootstrapMethodName, indexBootstrapMethodDescriptor);  \/\/ BootstrapMethodName u1(CONSTANT_Utf8); utf8(BOOTSTRAP_METHOD_NAME);  \/\/ BootstrapMethodDescriptor u1(CONSTANT_Utf8); utf8(BOOTSTRAP_METHOD_DESCRIPTOR); <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438\u0434\u0451\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0444\u043b\u0430\u0433\u0430\u0445 (<code>public<\/code>, <code>final<\/code>, <code>enun<\/code> \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435), \u0438\u043c\u0435\u043d\u0430\u0445 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043a\u0430:<\/p>\n<pre><code class=\"java\">u2(access); u2(indexThisClass); u2(indexSuperClass); <\/code><\/pre>\n<p>  \u041d\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043d\u0438 \u043f\u043e\u043b\u0435\u0439, \u043d\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0443 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c bootstrap-\u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<pre><code class=\"java\">\/\/ Interfaces count u2(0); \/\/ Fields count u2(0); \/\/ Methods count u2(0); \/\/ Attributes count u2(1); <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0438 \u0442\u0435\u043b\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u0430:<\/p>\n<pre><code class=\"java\">\/\/ BootstrapMethods attribute u2(indexBootstrapMethodsUtf8); \/\/ BootstrapMethods attribute size u4(2 \/* num_bootstrap_methods *\/ + 6 * elementCount); \/\/ Bootstrap method count u2(elementCount);  for (int i = 0; i &lt; elementCount; i++) {     \/\/ bootstrap_method_ref     u2(indexBootstrapMethodHandle);     \/\/ num_bootstrap_arguments     u2(1);     \/\/ bootstrap_arguments[1]     u2(baseInteger + i); } <\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, \u043a\u043b\u0430\u0441\u0441 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d. \u0411\u0435\u0440\u0451\u043c \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u0438\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438\u0437 \u043d\u0438\u0445 <code>ClassReader<\/code>:<\/p>\n<pre><code class=\"java\">private ClassReader getBootstrapClassReader(int version, int access, String enumClassName, List&lt;String&gt; elementNames) {     byte[] bootstrapClassBytes = new ConDyBootstrapClassGenerator(         version,         access,         enumClassName,         elementNames     )     .generate();      if (bootstrapClassBytes == null) {         return null;     } else {         return new ClassReader(bootstrapClassBytes);     } } <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430: <a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/blob\/v1.0\/3_HugeEnumGenerator\/src\/main\/java\/com\/maccimo\/hugeenum\/generator\/ConDyBootstrapClassGenerator.java\" rel=\"nofollow\">ConDyBootstrapClassGenerator.java<\/a><br \/>  <a name=\"Future\"><\/a>  <\/p>\n<h1>\u0421\u0432\u0435\u0442\u043b\u043e\u0435 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/h1>\n<p>  \u041d\u0435\u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043e\u0442\u0432\u043b\u0435\u0447\u0451\u043c\u0441\u044f \u043e\u0442 \u043d\u0430\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"java\"> public class DiscoverConstantValueAttribute {      public static final String STRING = &quot;Habrahabr, world!&quot;;      public static final Object OBJECT = new Object();  }  <\/code><\/pre>\n<p>  \u0412 \u0431\u043b\u043e\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438, \u0432 \u043f\u043e\u043b\u0435 <code>OBJECT<\/code>:<\/p>\n<pre><code class=\"java\"> static {     OBJECT = new Object();     \/\/  0: new           #2                  \/\/ class java\/lang\/Object     \/\/  3: dup     \/\/  4: invokespecial #1                  \/\/ Method java\/lang\/Object.&quot;&lt;init&gt;&quot;:()V     \/\/  7: putstatic     #7                  \/\/ Field OBJECT:Ljava\/lang\/Object;     \/\/ 10: return }  <\/code><\/pre>\n<p>  \u0410 \u043a\u0430\u043a \u0436\u0435 <code>STRING<\/code>?<br \/>  \u041f\u0440\u043e\u043b\u0438\u0442\u044c \u0441\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0437\u0430\u0433\u0430\u0434\u043a\u0443 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <nobr><code>javap -c -s -p -v DiscoverConstantValueAttribute.class<\/code><\/nobr>, \u0432\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442:<\/p>\n<pre><code class=\"java\"> public static final java.lang.String STRING;   descriptor: Ljava\/lang\/String;   flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL   ConstantValue: String Habrahabr, world!  <\/code><\/pre>\n<p>  \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u043e \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 <code>ConstantValue<\/code>. \u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0438\u0448\u0443\u0442 \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 \u0432 <a href=\"https:\/\/docs.oracle.com\/javase\/specs\/jvms\/se11\/html\/jvms-4.html#jvms-4.7.2\" rel=\"nofollow\">JVMS11 \u00a74.7.2<\/a>:<\/p>\n<blockquote><p>A ConstantValue attribute represents the value of a constant expression (JLS \u00a715.28), and is used as follows:  <\/p>\n<ul>\n<li>If the ACC_STATIC flag in the access_flags item of the field_info structure is set, then the field represented by the field_info structure is assigned the value represented by its ConstantValue attribute as part of the initialization of the class or interface declaring the field (\u00a75.5). This occurs prior to the invocation of the class or interface initialization method of that class or interface (\u00a72.9.2).<\/li>\n<li>Otherwise, the Java Virtual Machine must silently ignore the attribute.<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p>  \u0415\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0443 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e <code>static<\/code> \u0438 <code>final<\/code> (\u0445\u043e\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043d\u043e \u0438 \u043d\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043e) \u043f\u043e\u043b\u044f, \u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442\u0430. \u041f\u0440\u0438\u0447\u0451\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u043e \u0435\u0449\u0451 \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043c\u0430\u043d\u0447\u0438\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0443 \u043d\u0430\u0441 \u0432 \u043f\u043e\u0437\u0430\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043a\u0430\u043a \u0440\u0430\u0437 \u0431\u044b\u043b\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u043f\u0443\u0441\u0442\u044c \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435.<\/p>\n<p>  \u0418 \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0435, \u043a\u0442\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0432 JEP 309 \u0435\u0441\u0442\u044c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 <code>ConstantValue<\/code>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044d\u0442\u043e \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u0435 \u00abFuture work\u00bb:<\/p>\n<blockquote><p><b>Future work<\/b><\/p>\n<p>  Possible future extensions include:<\/p>\n<p>  \u2026  <\/p>\n<ul>\n<li>Attaching dynamic constants to the ConstantValue attribute of static fields<\/li>\n<\/ul>\n<p>  <\/p><\/blockquote>\n<p>  \u041f\u043e\u043a\u0430 \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0438\u0448\u044c \u043c\u0435\u0447\u0442\u0430\u0442\u044c \u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u0444\u0438\u0447\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u0442 \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u00ab\u0445\u043e\u0440\u043e\u0448\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c\u00bb \u0432 \u00ab\u0433\u043e\u0442\u043e\u0432\u043e\u00bb. \u0422\u043e\u0433\u0434\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0442\u0440\u0430\u0442\u044f\u0442 \u0441\u0432\u043e\u0451 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<\/p>\n<p>  \u041f\u043e \u0433\u0440\u0443\u0431\u044b\u043c \u043f\u0440\u0438\u043a\u0438\u0434\u043a\u0430\u043c \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0434\u0435\u044f\u0442\u044c\u0441\u044f \u043d\u0430 <code>65\u00a0489 \/ 4 = 16_372<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0417\u0434\u0435\u0441\u044c <code>65_489<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, 46 \u0438\u0437 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 65_535 \u0443\u0448\u043b\u0438 \u043d\u0430 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b. <code>4<\/code> \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0442\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0435\u043c\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/p>\n<p>  \u0422\u043e\u0447\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 JDK \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <a name=\"Unsafe\"><\/a>  <\/p>\n<h1>Unsafe<\/h1>\n<p>  \u041d\u0430\u0448 \u0432\u0440\u0430\u0433 \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u0431\u043b\u043e\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u0430\u0439\u0434\u0438 \u043c\u044b \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u0446\u0438\u043a\u043b, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0431\u0440\u0430\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u0431\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0440\u044b\u0432.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 API \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>static final<\/code> \u043f\u043e\u043b\u044f \u0434\u0430\u0436\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043d\u0438 Reflection, \u043d\u0438 VarHandles. \u041d\u0430\u0448\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043d\u0430\u0434\u0435\u0436\u0434\u0430 \u2014 \u0432\u0435\u043b\u0438\u043a\u0438\u0439 \u0438 \u0443\u0436\u0430\u0441\u043d\u044b\u0439 <code>sun.misc.Unsafe<\/code>.<\/p>\n<p>  FizzBuzz \u0432 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043c\u043e\u0433 \u0431\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Unsafe FizzBuzz<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">import java.lang.reflect.Field; import sun.misc.Unsafe;  public enum FizzBuzz {      private static final FizzBuzz[] $VALUES;      public static final FizzBuzz Fizz;     public static final FizzBuzz Buzz;     public static final FizzBuzz FizzBuzz;      public static FizzBuzz[] values() {         return (FizzBuzz[]) $VALUES.clone();     }      public static FizzBuzz valueOf(String name) {         return (FizzBuzz) Enum.valueOf(FizzBuzz.class, name);     }      private FizzBuzz(String name, int ordinal) {         super(name, ordinal);     }      private static FizzBuzz[] createValues() {         return new FizzBuzz[] {             Fizz,             Buzz,             FizzBuzz         }     }      static  {         Field unsafeField = Unsafe.class.getDeclaredField(&quot;theUnsafe&quot;);         unsafeField.setAccessible(true);         Unsafe unsafe = (Unsafe) unsafeField.get(null);          String[] fieldNames = &quot;Fizz,Buzz,FizzBuzz&quot;.split(&quot;,&quot;);         for(int i = 0; i &lt; fieldNames.length; i++) {             String fieldName = fieldNames[i];             Field field = FizzBuzz.class.getDeclaredField(fieldName);             long fieldOffset = unsafe.staticFieldOffset(field);             unsafe.putObject(FizzBuzz.class, fieldOffset, new FizzBuzz(fieldName, i));         }          $VALUES = createValues();     }  } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 21 \u0442\u044b\u0441\u044f\u0447\u0435\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u0438 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<\/p>\n<p>  \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043d\u0430 <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/lang\/Enum.html#ordinal()\" rel=\"nofollow\">Enum::ordinal()<\/a> \u0442\u0440\u0435\u0431\u0443\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u044f\u0432\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0451\u043d \u043f\u043e\u043b\u0435\u0439 \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0447\u0442\u0438 \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u044f \u0440\u0430\u0437\u043c\u0435\u0440 class-\u0444\u0430\u0439\u043b\u0430. <\/p>\n<blockquote><p>public final int ordinal()<\/p>\n<p>  Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial constant is assigned an ordinal of zero).   <\/p><\/blockquote>\n<p>  \u0422\u0443\u0442 \u043c\u043e\u0433 \u0431\u044b \u043f\u043e\u043c\u043e\u0447\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API \u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u043f\u0443\u043b\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043c\u044b \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u043c, \u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e API \u043d\u0435\u0442 \u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u0431\u0443\u0434\u0435\u0442. \u0418\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u0432 OpenJDK \u043c\u0435\u0442\u043e\u0434 <a href=\"https:\/\/hg.openjdk.java.net\/jdk\/jdk11\/file\/1ddf9a99e4ad\/src\/java.base\/share\/classes\/java\/lang\/Class.java#l3043\" rel=\"nofollow\">Class::getConstantPool()<\/a> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a package-private \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u043f\u0440\u043e\u043c\u0435\u0442\u0447\u0438\u0432\u043e.<\/p>\n<p>  \u0411\u043b\u043e\u043a \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0435\u043d \u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0442 <code>createValues()<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0432\u0441\u0442\u0440\u043e\u0438\u0432 \u0435\u0433\u043e \u0442\u0435\u043b\u043e \u0432 \u0446\u0438\u043a\u043b:<\/p>\n<pre><code class=\"java\">static  {     Field unsafeField = Unsafe.class.getDeclaredField(&quot;theUnsafe&quot;);     unsafeField.setAccessible(true);     Unsafe unsafe = (Unsafe) unsafeField.get(null);      String[] fieldNames = &quot;Fizz,Buzz,FizzBuzz&quot;.split(&quot;,&quot;);     FizzBuzz[] localValues = new FizzBuzz[fieldNames.length];     for(int i = 0; i &lt; fieldNames.length; i++) {         String fieldName = fieldNames[i];         Field field = FizzBuzz.class.getDeclaredField(fieldName);         long fieldOffset = unsafe.staticFieldOffset(field);         unsafe.putObject(             FizzBuzz.class,             fieldOffset,             (localValues[i] = new FizzBuzz(fieldName, i))         );     }      $VALUES = localValues; } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0430\u0432\u0438\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441: \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>createValues()<\/code> \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0438\u043f\u0430 <code>Fieldref<\/code> \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u043e\u043b\u0435\u0439, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0442\u0438\u043f\u0430 <code>NameAndType<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0442\u0438\u043f\u0430 <code>Fieldref<\/code>. \u0412 \u043f\u0443\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432\u044b\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f <code>2 * &lt;\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438&gt;<\/code> \u0441\u043b\u043e\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u0440\u0430\u0434\u0443\u0436\u043d\u043e, \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438: \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 65 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043c\u044b\u0441\u043b\u0438\u043c\u044b\u0435 \u043f\u043e\u043b\u0442\u043e\u0440\u044b \u043c\u0438\u043d\u0443\u0442\u044b. \u041a\u0430\u043a \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u00ab\u0440\u0435\u0444\u043b\u0435\u043a\u0448\u043d \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u00bb. <\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/hg.openjdk.java.net\/jdk\/jdk11\/file\/1ddf9a99e4ad\/src\/java.base\/share\/classes\/java\/lang\/Class.java#l3226\" rel=\"nofollow\">Class::getDeclaredField()<\/a> \u0432 OpenJDK \u0438\u043c\u0435\u0435\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0430\u0441\u0438\u043c\u043f\u0442\u043e\u0442\u0438\u043a\u0443 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043b\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u0430 \u043d\u0430\u0448 \u0431\u043b\u043e\u043a \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0443\u044e.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u0435\u0451 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e:<\/p>\n<pre><code class=\"java\">static  {     Field unsafeField = Unsafe.class.getDeclaredField(&quot;theUnsafe&quot;);     unsafeField.setAccessible(true);     Unsafe unsafe = (Unsafe) unsafeField.get(null);      String[] fieldNames = &quot;Fizz,Buzz,FizzBuzz&quot;.split(&quot;,&quot;);     Field[] fields = FizzBuzz.class.getDeclaredFields();     HashMap&lt;String, Field&gt; cache = new HashMap&lt;&gt;(fields.length);      for(Field field : fields) {         cache.put(field.getName(), field);     }      for (int i = 0; i &lt; fieldNames.length; i++) {         String fieldName = fieldNames[i];         Field field = cache.get(fieldName);         long fieldOffset = unsafe.staticFieldOffset(field);         unsafe.putObject(             FizzBuzz.class,             fieldOffset,             (localValues[i] = new FizzBuzz(fieldName, i))         );     }          $VALUES = localValues; } <\/code><\/pre>\n<p>  \u041e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e 65_410, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432 24 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 javac \u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0435\u043b\u0443 \u0432 65_505 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u043c\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>  <a name=\"Testing\"><\/a>  <\/p>\n<h1>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c<\/h1>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u043e\u0437\u044c\u043c\u0451\u043c \u0441\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <nobr><code>java -jar HugeEnumGen.jar -a Unsafe UnsafeHugeEnum<\/code><\/nobr>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c class-\u0444\u0430\u0439\u043b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 2 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u0438 65_410 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 Java-\u043f\u0440\u043e\u0435\u043a\u0442 \u0432 IDEA \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p>  \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0447\u0442\u043e IDEA \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u0430 \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0441\u0442\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/m4\/su\/-6\/m4su-6bvdkkqmf3pypqrmpzntnw.gif\"><\/p>\n<p>  \u0410\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0441\u0435\u043a\u0443\u043d\u0434 \u043a\u0430\u043a \u043d\u0430 \u0434\u0440\u0435\u0432\u043d\u0435\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c i5, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c i7 8700K. \u0410 \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 quick fix \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 switch \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0442\u043e IDEA \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0434\u0430\u0436\u0435 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u043d\u0430. \u041f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043d\u043e \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. \u041e\u0442\u0437\u044b\u0432\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0436\u0435\u043b\u0430\u0442\u044c \u043b\u0443\u0447\u0448\u0435\u0433\u043e.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 <code>switch<\/code>:<\/p>\n<pre><code class=\"java\">public class TestFew {      public static void main(String... args) {         for(String arg : args) {             System.out.print(arg + &quot; : &quot;);              try {                 UnsafeHugeEnum value = UnsafeHugeEnum.valueOf(arg);                  doSwitch(value);             } catch(Throwable e) {                 e.printStackTrace(System.out);             }         }     }      private static void doSwitch(UnsafeHugeEnum value) {         switch(value) {             case VALUE_00001:                 System.out.println(&quot;First&quot;);                 break;             case VALUE_31415:                 System.out.println(&quot;(int) (10_000 * Math.PI)&quot;);                 break;             case VALUE_65410:                 System.out.println(&quot;Last&quot;);                 break;             default:                 System.out.println(&quot;Unexpected value: &quot; + value);                 break;         }     }  } <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0448\u0442\u0430\u0442\u043d\u043e:<\/p>\n<pre><code class=\"plaintext\">$ java TestFew VALUE_00001 VALUE_00400 VALUE_31415 VALUE_65410 VALUE_00001 : First VALUE_00400 : Unexpected value: VALUE_00400 VALUE_31415 : (int) (10_000 * Math.PI) VALUE_65410 : Last <\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 <code>switch<\/code>? \u041c\u043e\u0436\u0435\u043c \u043c\u044b, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c <code>switch<\/code> \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 65 \u0442\u044b\u0441\u044f\u0447 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432?<\/p>\n<pre><code class=\"java\">switch(value) {     case VALUE_00001:     case VALUE_00002:         ...     case VALUE_65410:         System.out.println(&quot;One of known values: &quot; + value);         break;     default:         System.out.println(&quot;Unexpected value: &quot; + value);         break; } <\/code><\/pre>\n<p>  \u0423\u0432\u044b, \u043d\u043e \u043d\u0435\u0442. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0446\u0435\u043b\u0443\u044e \u043f\u0430\u0447\u043a\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445:<\/p>\n<pre><code class=\"plaintext\">$ javac -fullversion javac full version &quot;14.0.1+7&quot;  $ javac TestAll.java TestAll.java:18: error: code too large for try statement         switch(value) {         ^ TestAll.java:65433: error: too many constants                 break;                 ^ TestAll.java:17: error: code too large     private static void doSwitch(UnsafeHugeEnum value) {                         ^ TestAll.java:1: error: too many constants public class TestAll {        ^ 4 errors <\/code><\/pre>\n<ul>\n<li><a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/blob\/v1.0\/6_Tests\/src\/TestFew.java\" rel=\"nofollow\">TestFew.java<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/blob\/v1.0\/6_Tests\/src\/TestAll.java\" rel=\"nofollow\">TestAll.java<\/a><\/li>\n<\/ul>\n<p>  <a name=\"JavacSwitchTranslation\"><\/a>  <\/p>\n<h1>Javac \u0438 switch<\/h1>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f <code>switch<\/code> \u043f\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 JVM \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0433\u043b\u0430\u0432\u0430 <a href=\"https:\/\/docs.oracle.com\/javase\/specs\/jvms\/se11\/html\/jvms-3.html#jvms-3.10\" rel=\"nofollow\">JVMS11 \u00a73.10 Compiling Switches<\/a>, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>switch<\/code> \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430, \u2014 <code>tableswitch<\/code> \u0438\u043b\u0438 <code>lookupswitch<\/code>. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0439 <code>switch<\/code> \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c \u0438\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u044b \u0432 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u043c.<\/p>\n<p>  \u041b\u0443\u0447\u0448\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043a\u043e\u0434, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 <code>javac<\/code>.<\/p>\n<p>  \u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 <code>tableswitch<\/code> \u0438 <code>lookupswitch<\/code> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 <a href=\"https:\/\/hg.openjdk.java.net\/jdk\/jdk11\/file\/1ddf9a99e4ad\/src\/jdk.compiler\/share\/classes\/com\/sun\/tools\/javac\/jvm\/Gen.java#l1126\" rel=\"nofollow\">Gen::visitSwitch()<\/a> \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0447\u0438\u0441\u043b\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432 <code>switch<\/code>. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 <code>tableswitch<\/code>:<\/p>\n<pre><code class=\"java\">\/\/ Determine whether to issue a tableswitch or a lookupswitch \/\/ instruction. long table_space_cost = 4 + ((long) hi - lo + 1); \/\/ words long table_time_cost = 3; \/\/ comparisons long lookup_space_cost = 3 + 2 * (long) nlabels; long lookup_time_cost = nlabels; int opcode =     nlabels &gt; 0 &amp;&amp;     table_space_cost + 3 * table_time_cost &lt;=     lookup_space_cost + 3 * lookup_time_cost     ?     tableswitch : lookupswitch; <\/code><\/pre>\n<p>  \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code>tableswitch<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 16 \u0431\u0430\u0439\u0442\u043e\u0432 \u043f\u043b\u044e\u0441 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043e\u0434\u043d\u043e\u043c <code>switch<\/code> \u043d\u0438 \u043f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 <code>( 65_535 - 16 ) \/ 4 = 16_379<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0441\u043b\u0435 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0435\u0442\u043e\u043a <code>case<\/code> \u0432 \u0442\u0435\u043b\u0435 <code>switch<\/code> \u0434\u043e 16 \u0442\u044b\u0441\u044f\u0447 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0441\u0430\u043c\u0430\u044f \u0437\u0430\u0433\u0430\u0434\u043e\u0447\u043d\u0430\u044f:<\/p>\n<pre><code class=\"plaintext\">TestAll.java:18: error: code too large for try statement         switch(value) {         ^ <\/code><\/pre>\n<p>  \u0412 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u0447\u0443\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435, \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u044e \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u0430\u0445\u0430\u0440\u0430. \u0417\u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044e <code>switch<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043c\u0435\u0442\u043e\u0434\u044b <code>visitEnumSwitch()<\/code>, <code>mapForEnum()<\/code> \u0438 \u043a\u043b\u0430\u0441\u0441 <code>EnumMapping<\/code> \u0432 <a href=\"https:\/\/hg.openjdk.java.net\/jdk\/jdk11\/file\/1ddf9a99e4ad\/src\/jdk.compiler\/share\/classes\/com\/sun\/tools\/javac\/comp\/Lower.java\" rel=\"nofollow\">Lower.java<\/a>.<\/p>\n<p>  \u0422\u0430\u043c \u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u043c \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">EnumMapping JavaDoc<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"java\">\/** This map gives a translation table to be used for enum  *  switches.  *  *  &lt;p&gt;For each enum that appears as the type of a switch  *  expression, we maintain an EnumMapping to assist in the  *  translation, as exemplified by the following example:  *  *  &lt;p&gt;we translate  *  &lt;pre&gt;  *          switch(colorExpression) {  *          case red: stmt1;  *          case green: stmt2;  *          }  *  &lt;\/pre&gt;  *  into  *  &lt;pre&gt;  *          switch(Outer$0.$EnumMap$Color[colorExpression.ordinal()]) {  *          case 1: stmt1;  *          case 2: stmt2  *          }  *  &lt;\/pre&gt;  *  with the auxiliary table initialized as follows:  *  &lt;pre&gt;  *          class Outer$0 {  *              synthetic final int[] $EnumMap$Color = new int[Color.values().length];  *              static {  *                  try { $EnumMap$Color[red.ordinal()] = 1; } catch (NoSuchFieldError ex) {}  *                  try { $EnumMap$Color[green.ordinal()] = 2; } catch (NoSuchFieldError ex) {}  *              }  *          }  *  &lt;\/pre&gt;  *  class EnumMapping provides mapping data and support methods for this translation.  *\/ <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0430\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 <code>try<\/code> \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <code>TestAll$0<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 \u2014 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043a\u043e\u0434 \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0437\u0430\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043c \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>switch<\/code> \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0437\u0430\u0449\u0438\u0449\u0430\u044f \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0442 \u043f\u0430\u0433\u0443\u0431\u043d\u043e\u0433\u043e \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430. <\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0443 \u0447\u0430\u0441\u0442\u0438 \u0438\u0437 \u043d\u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>ordinal()<\/code> \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"java\">try {     $SwitchMap$UnsafeHugeEnum[UnsafeHugeEnum.VALUE_00001.ordinal()] = 1;     \/\/  9: getstatic     #2                  \/\/ Field $SwitchMap$UnsafeHugeEnum:[I     \/\/ 12: getstatic     #3                  \/\/ Field UnsafeHugeEnum.VALUE_00001:LUnsafeHugeEnum;     \/\/ 15: invokevirtual #4                  \/\/ Method UnsafeHugeEnum.ordinal:()I     \/\/ 18: iconst_1     \/\/ 19: iastore } \/\/ 20: goto          24 catch(NoSuchFieldError e) { } \/\/ 23: astore_0 <\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0441\u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0435\u043d \u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442 \u043e\u0442 15 \u0434\u043e 17 \u0431\u0430\u0439\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u043b\u043e\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 3_862 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c <code>switch<\/code> \u043f\u0440\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>javac<\/code>.<\/p>\n<p>  <a name=\"Conclusion\"><\/a>  <\/p>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u041c\u044b \u0443\u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u0451\u043c\u0430, \u043a\u0430\u043a \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>$VALUES<\/code> \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0441 2_746 \u0434\u043e 10_920.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b constant dynamic \u043d\u0430 \u0444\u043e\u043d\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043d\u0430 43 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0437\u0430\u0442\u043e \u043f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u0437\u044f\u0449\u043d\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0430\u0442\u0442\u0440\u0438\u0431\u0443\u0442 <code>ConstantValue<\/code> \u043d\u0430\u0443\u0447\u0430\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, \u0442\u043e \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0438 \u0441 10 \u0442\u044b\u0441\u044f\u0447 \u0434\u043e 16.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>sun.misc.Unsafe<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u0441\u043a\u0430\u0447\u0451\u043a \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e 65_410. \u041d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u0442\u043e, \u0447\u0442\u043e <code>Unsafe<\/code> \u044d\u0442\u043e \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0435 API, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c \u0438 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043d\u0435\u043c\u0430\u043b\u044b\u0439 \u0440\u0438\u0441\u043a, \u043e \u0447\u0451\u043c \u043f\u0440\u044f\u043c\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 javac:<\/p>\n<pre><code class=\"plaintext\">Test.java:3: warning: Unsafe is internal proprietary API and may be removed in a future release import sun.misc.Unsafe;                ^ <\/code><\/pre>\n<p>  \u041d\u043e, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u043d\u0443\u0436\u043d\u043e \u0435\u0449\u0451 \u0438 \u0441\u0443\u043c\u0435\u0442\u044c \u0438\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0442\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043a\u0430\u043a \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b IDE, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Java.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u0445\u0443\u0434\u0448\u0430\u0442\u044c \u043e\u0442\u0437\u044b\u0432\u0447\u0438\u0432\u043e\u0441\u0442\u044c IDE \u043a\u0430\u043a \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c class-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 javac \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 <code>switch<\/code> \u0431\u043e\u043b\u0435\u0435 3_862 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0418\u0437 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 3_862 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Java, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>  <a name=\"Appendix\"><\/a>  <\/p>\n<h1>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b<\/h1>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 GitHub: <a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\" rel=\"nofollow\">https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle<\/a><\/p>\n<p>  \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 JAR-\u0444\u0430\u0439\u043b: <a href=\"https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/releases\/tag\/v1.0\" rel=\"nofollow\">https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle\/releases\/tag\/v1.0<\/a><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre>  Huge enumeration generator      https:\/\/github.com\/Maccimo\/HugeEnumGeneratorArticle  Additional information (in Russian):      https:\/\/habr.com\/ru\/post\/483392\/     https:\/\/habr.com\/ru\/post\/501870\/  Usage:     java -jar HugeEnumGen.jar [ &lt;options&gt; ] &lt;enum name&gt;      &lt;enum name&gt;         An enumeration class name.         Should be a valid Java identifier. May contain package name.  Options:      -d &lt;directory&gt;         Output directory path.         Current working directory by default.      -e &lt;item list file&gt;         Path to UTF8-encoded text file with list of enumeration item names.         Item names will be autogenerated if absent.         Mutually exclusive with the -c option.      -c &lt;count&gt;         Count of autogenerated enumeration item names.         Mutually exclusive with the -e option.         Default value: Algorithm-depended      -a &lt;algorithm&gt;         Enumeration generation algorithm.         Supported algorithms:           ConDy          - Employ Constant Dynamic (JEP 309) for enum elements initialization           ExtractMethod  - Extract enum elements initialization code to separate method           Unsafe         - Employ sun.misc.Unsafe for enum elements initialization          Default algorithm: ExtractMethod      -h \/ -?         Show this help page.  Example:      java -jar HugeEnumGen.jar -d .\/bin -c 2020 com.habr.maccimo.HugeEnum2020  <\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/501870\/\"> https:\/\/habr.com\/ru\/post\/501870\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/501870\/\"><nobr><a href=\"https:\/\/habr.com\/ru\/post\/483392\/\"><b>\u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/b><\/a>&nbsp;|&nbsp;<b>\u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/b><\/nobr>  <\/p>\n<hr>\n<p>  \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438.<br \/>  \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043d\u0430 \u043d\u0430\u0448\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c IDE, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 JVM.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-303846","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=303846"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/303846\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=303846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=303846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=303846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}