æšæ¥ïŒ1æ8æ¥ïŒãJavaèšèªã¢ãŒããã¯ããšããŠOracleã§åããŠããBrian Goetzã¯ã ãããŒã¯ãŒãããã£ãšå¿ èŠã ããã£ããã³ïŒããšããæçŽã Project Amberã¡ãŒãªã³ã°ãªã¹ãã«å ¬éããŸãããããã¯ãæ°ããããŒã¯ãŒããèšèªã«è¿œå ããåé¡ã解決ããæ¹æ³ãææ¡ããŸããã ãã®çµæãããŒã¯ãŒãã¯éãã« ã éãã¡ã€ãã« ã æçµãã¡ã€ãã« ã ãã®ãªã¿ãŒã³ãªã©ã®èšèªã§è¡šç€ºãããå ŽåããããŸã ïŒæçš¿ã®æåŸã®åãæãã®äžã«å®å šãªãªã¹ããåŸ ã£ãŠããŸãïŒã
éå»ã«ã¯ãã®åé¡ã¯ãã£ãã«èšèªã§çºçããªãã£ãã®ã§ã圌ãã¯éåžžããã«ã€ããŠããŸãèããããã§ããã ãæ©ãéŠãäžããããšãããã å°æ¥ã®æ¢åã®ã¢ãããŒãã®æ¬ ç¹ã«ããããããã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯åé¡ãããããã®ç¹ã§ãäºåã«æ©èœããããšã決å®ãããŸããã ææ¡ããã解決çïŒããŒã¯ãŒããšããŠäœ¿çšã§ããåå¥åœ¢åŒã®ç¯å²ãæ¡å€§ããŠã¿ãŠãã ããã1ã€ïŒãŸãã¯è€æ°ïŒã®æ¢åã®ããŒã¯ãŒããŸãã¯äºçŽæžã¿èå¥åã䜿çšãããã€ãã³ã§åºåãããããŒã¯ãŒããèš±å¯ããŸãã
éèŠãªã¡ã¢ïŒBrownã¯ãæ°ããããŒã¯ãŒãã¯èª¬æã®ããã®äŸãšããŠã®ã¿æäŸãããŠããããããã«çŠç¹ãåãããã¹ãã§ã¯ãªãããšã«æ³šæããŸãã ããããç§ãã¡ã®åã«ãèšèªã®æ§æãå°æ¥ã©ã®ããã«å€åããå¯èœæ§ããããã«ã€ããŠããèãããããã¢ã³ã¹ãã¬ãŒã·ã§ã³ãããããšã¯æããã§ã-æçŽã§ã¯ãèè ã¯ãã®ã¢ã€ãã¢ãå€ãã®æãŸããæ¬ èœããèšèªã³ã³ã¹ãã©ã¯ããJavaã«è¿œå ããã®ã«åœ¹ç«ã€ãšè¿°ã¹ãŠããŸãã
ãå€ããã¡ãœãã
ãåãã®ãšãããä»æ¥ã®Javaèšèªã«ã¯50åã®ããŒã¯ãŒãïŒ keyword ïŒããããå€æ°ã®èå¥åãšããŠäœ¿çšããããšã¯çŠããããŠããŸãã å®å šãªãªã¹ãã¯ã3.9ç¯ã®JLSèšèªä»æ§ã«èšèŒãããŠããŸãã ãã®ãªã¹ãã¯ãèšèªã®æåã®ããŒãžã§ã³ããããŸãå€æŽãããŠããŸãã-ããŒãžã§ã³4ã§ã¢ãµãŒãã®ã¿ãè¿œå ããã5ã§åæ ã9ã§_ã«å ããŠãããŒã¯ãŒããšåæ§ã«åäœãããäºçŽæžã¿èå¥åãïŒ true ã false ã null ïŒããããŸãæ¹æ³ã
éçºè ãèšèªã«æ°ããããŒã¯ãŒããè¿œå ããå¿ èŠãããå Žåã次ã®ããããã®æ¹æ³ã䜿çšããå¿ èŠããããŸãã
- æææš©ã®åŒ·å¶è²æž¡ïŒä»¥åã¯èå¥åã§ãã£ãåèªãããŒã¯ãŒãã«å€æããŸãïŒäŸïŒ assert ïŒã
- å»æ£ïŒæ¢åã®ããŒã¯ãŒãã¯ã䜿çšãããäºå®ããªãã£ãæ¹æ³ã§äœ¿çšããå§ããŸãïŒäŸã¯ã泚éå€ãŸãã¯ããã©ã«ãã¡ãœããã®ããã©ã«ãã®äœ¿çšã§ãïŒã
- ãããªãã§ïŒæ°ããããŒã¯ãŒããå¿ èŠãšããªãæ§æã䜿çšããæ¹æ³ãèŠã€ããŸã-ããšãã°ã泚éã®ä»£ããã«æ³šéçšã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããæ©èœãå®å šã«æŸæ£ããŸãã
- å¯èŠæ§ã®äœæïŒè±éçãªèšèªã®ææïŒ å¶éãããããŒã¯ãŒããäºçŽãããã¿ã€ãå ïŒã䜿çšããŠãç¶æ³äŸåããŒã¯ãŒãã®é¯èŠãäœæããŸãã
ååãšããŠããããã®æ¹æ³ã¯ããããéåžžé©çšã§ããŸãããããããã«æ¬ ç¹ããããèšèªã®æ¬æ Œçãªæ¬æ Œçãªæ¡åŒµã®ããã«ã¯ããããã®æ¹æ³ã ãã§ã¯æããã«ååã§ã¯ãããŸãã-å°æ¥ã®ã€ãããŒã·ã§ã³ã®ããã«ãèšèªæ§æã®å®å šãªæ¡åŒµã®äžå¯èœæ§ãæé€ããå¿ èŠããããŸãã
æ°ããããŒã¯ãŒããè¿œå ãã
æ°ããåèªãããã ãåããè¿œå ããããšã«å¯ŸããŠã次ã®è°è«ããããŸãã
- éžæããããŒã¯ãŒãããã䟿å©ã§äººæ°ãããã»ã©ãããã°ã©ã ã®ãœãŒã¹ã³ãŒãã§é »ç¹ã«åºäŒããããèšèªã«éäºææ§ãè¿œå ãããŸãïŒããšãã°ãJava SE 1.4ã§assertãšããåèªãç»å Žãããšããã¹ãŠã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãæ©èœããªããªããŸããïŒã
- éçºè ããã®ãããªã³ãŒãã®éäºææ§ãæé€ããã³ã¹ãã¯ãå°èŠæš¡ïŒããŒã«ã«å€æ°ã®ååå€æŽïŒããèŽåœçãªïŒã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœãããŸãã¯ãããªãã¯ã¿ã€ããç¡å¹åãããå ŽåïŒãŸã§å€§ããç°ãªããŸãã
- èšèªéçºè ã䜿çšããå¯èœæ§ãæãé«ãåèªã¯ãäžè¬çãªèå¥åã§ãïŒããšãã°ã value ã var ããŸãã¯method ïŒã
- ãœãŒã¹ã³ãŒãã§ãã£ãã«äœ¿çšããããè¡çªãå°ãªãåèªãéžæããå Žåã éåžžã¯èšèªã§åé¿ããããšãæãŸãããšæãããéåžžã¯but_not_always_finalã®ãããªæ§é ã䜿çšããå¿ èŠããããŸãã
- ããã§ããã£ãã«äœ¿çšãããªãåèªãéžæããããšã«é Œãå Žåããã®æ¹æ³ãããŸãé »ç¹ã«äœ¿çšããŠãæ©èœããŸãããäºææ§ãæãªãããšã¯ãããããŸããã
ãå€ããããŒã¯ãŒãã®åå©çš
ãããã®èšèãšãšãã«çãç¶ããããã ãã«ã€ããŠã¯ãããã€ãã®èæ ®äºé ããããŸãã
- ããŸããŸãªã³ã³ããã¹ãã§ããŒã¯ãŒããåå©çšããããã®åäŸã¯ãå€ãã®ããã°ã©ãã³ã°èšèªã«èŠãããŸãïŒJavaã®äŸã¯ããå€æŽäžå¯ãããåå®çŸ©äžå¯ãããæ¡åŒµäžå¯ãã®æå®ã«ïŒ ïŒabïŒuse ïŒ finalã䜿çšããŠããŸã ïŒã
- ãã®ã¢ãããŒãã¯çã«ããªã£ãŠãããåç¬ã§å®è¡ãããå ŽåããããŸãããéåžžã¯åªå äºé ã§ã¯ãããŸããã
- æéãçµã€ã«ã€ããŠãããŒã¯ãŒãã®ã»ããã«å¯ŸããèŠä»¶ã®ã»ãããæ¡å€§ããããããªç¹ã«éããå¯èœæ§ããããŸããã³ãŒãã§null finalã䜿çšããã人ã¯ããŸããã
- åŸè ãèªåŒµã§ãããšæãããå Žåã¯ã JEP 325ã§äœæ¥ããŠããéã æ°ããã¹ã€ããæ§æã䜿çšããŠç°ãªãã»ãã³ãã£ã¯ã¹ã§ã¹ã€ãããèšè¿°ããããšãçå£ã«ææ¡ããããšã«çæããŠãã ããã æ°ããæ°ããã¹ã€ãã ã
æ°ããããŒã¯ãŒããªãã§çããæ¹æ³ã¯ïŒ ãããããäžéšã®äººã瀺åããããã«ãèšèªã®é²åãžã®å¯ŸåŠãå®å šã«ãããããšãã§ããŸãã ããããããã¯æ·±å»ã§ã¯ãªããéçºè ããã®èšèªã®æ°ããæ©èœã«å¥å šãªé¢å¿ããããããä»ã®äººã®æèŠã«ã¯é©åããŸããã
ã³ã³ããã¹ãããŒã¯ãŒã
ã³ãŒãã§ç¹å®ã®æå³ãæäŸããããã«äœ¿çšãããããäžèŠäºçŽèªïŒ CïŒã§äœ¿çš ïŒã§ã¯ãªãã³ã³ããã¹ãããŒã¯ãŒãã¯ãåããéæ³ã®æãã®ããã«èŠããŸãããããã§ã¯ããã©ã€ã¢ã³ã¯ç·Žç¿ã«åºã¥ããŠãã®äœ¿çšã«ã€ããŠç¬èªã®èŠè§£ã瀺ããŠããŸãïŒããšãã°ãJava 10ã®varå®è£ ã¯ããŒã¯ãŒãã§ã¯ãªãã äºçŽãããååã§ã ïŒã æ¢åã®ããã°ã©ã ããå£ããããšãªãæ°ããããŒã¯ãŒããè¿œå ãããšããå¹»æ³ãšåŒãæãã«ãèšèªã®è€éããšæªã¿ãå¢å€§ããŸãã
ã³ã³ããã¹ãã®ããŒã¯ãŒãã¯ãä»æ§ã®äœæè ãã³ã³ãã€ã©ãããã³IDEã«ãšã£ãŠå°é£ã§ãã 1ã€ãŸãã¯2ã€ã®ç¹æ®ãªã±ãŒã¹ã«é¢ããŠã¯ãããã¯åé¡ãåŒãèµ·ãããŸããããããããã©ãã§ã䜿çšããå§ãããšãã³ãŒããŸãã¯ãã°ããã®ããŒã«ããµããŒãããããã®ã¯ããã«é«ãã³ã¹ãã«å€æãããŸãã
ãããåŽäžããããšãã§ããŸã-圌ãã¯ãããã¯èšèªãŠãŒã¶ãŒã®åé¡ã§ã¯ãªãããã®äœæè ãšã³ã³ãã€ã©ãšIDEãæžã人ã ã®åé¡ã ãšèšããŸãã ãããå®éã«ã¯ã誰ããèŠããã§ããŸãã IDEã«ãšã£ãŠãããã¯é倧ãªåé¡ã«ãªãå¯èœæ§ããããŸããéçºè ãå ¥åããŠããå 容ïŒã³ã³ããã¹ãããŒã¯ãŒããŸãã¯èå¥åïŒãæšæž¬ããã«ã¯ãããå€ãã®å ¥åãå¿ èŠã«ãªããŸãã ãã®çµæããŠãŒã¶ãŒã¯æ§æã®åŒ·èª¿è¡šç€ºããªãŒãã³ã³ããªãŒããããã³ãªãã¡ã¯ã¿ãªã³ã°æ©èœã®æ©èœãäœäžããŸãã
ãã®ããŒã«ã䜿çšã§ããŸãããæ éã«è¡ã£ãŠãã ããã
èã®æªã¿
ãããã®ã¢ãããŒããåŒãèµ·ããåé¡-äžåšçšãªæ§æãç掻ãšãã°ã®äžå¿ èŠãªè€éã-ååãšããŠãç§ãã¡ã¯åŠ¥åããããšãã§ããããã§ãã ããããæãæçœãªåé¡ã§ã¯ãªãå¥ã®åé¡ããããŸããããŒã¯ãŒãã䜿çšããããšã®ãã¥ã¢ã³ã¹ã¯ãèšèªèªäœã®ãã¶ã€ã³ãæªãããããšããäºå®ã«ã€ãªãããŸãã
Javaéçºè ã«ãšã£ãŠã ã¢ãããŒã·ã§ã³ã®ä»£ããã«ã€ã³ã¿ãŒãã§ãŒã¹ãèšè¿°ããããšã¯ä»æ¥ã§ã¯ãããµããŠããŸããã@ãš "old"ããŒã¯ãŒãã®çµã¿åããã®ä»£ããã«ãã¬ã³ããªãŒãªçšèªã¢ãããŒã·ã§ã³ã䜿çšããæ¹ãã¯ããã«è«ççã§ããããšã«å šå¡ãåæããã§ãããã
å¥ã®äŸïŒäœ¿çšå¯èœãªä¿®é£Ÿåã®ã»ããïŒpublicãprivateãstaticãfinalãªã©ïŒãcompleteãšåŒã¶ããšã¯ã§ããŸãã-finalã§ãstaticã§ããªããã®ã¯èšããŸãã ã ããã¯ããã®ä¿®é£ŸåãæŸæ£ããããšã瀺ãæ¹æ³ããªããããããã©ã«ãã§ã¯å€æ°ãŸãã¯ã¯ã©ã¹ãæçµç㪠ããŸãã¯ããã©ã«ãã§ã¡ã³ããŒãéçãªæ©èœãäœæã§ããªãããšãæå³ããŸãã
ãã®åé¡ã¯ãèšèªã䜿çšãã人ã«ãšã£ãŠã¯ããã»ã©æçœã§ã¯ãããŸããããèšèªèªäœã®äœæè ã¯ãèšèªãããã«éçºããããšããèŠæã®ããã«ã絶ããééããç§ãã¡å šå¡ããã®ãããªæ±ºå®ã«ãéãæããªããã°ãªããŸããïŒæ瀺çã«ãæé»çã«ïŒã
äžèšã®ãã¹ãŠããã®çµè«ã¯ãããèªäœã瀺åããŠããŸãïŒããŒã¯ãŒãã®å¥ã®ãœãŒã¹ãå¿ èŠã§ãã
ææ¡ããããœãªã¥ãŒã·ã§ã³
ãã®èšèªã®å®éšçãªæ©èœã§ã¯ãæ§æã䜿çšããŠæ°ããããŒã¯ãŒããäºåã«æå®ããŸãããã®å Žåãæ°ããããŒã¯ãŒãèªäœã®åã«2ã€ã®ã¢ã³ããŒã¹ã³ã¢ãä»ããŸãïŒããšãã°ããããã¿ã€ãProject Valhallaã§ã¯__ByValueã§ã ïŒã ãã®æ±ºå®ã®çç±ã¯ç解ã§ããŸã-ããã¯äžæçãªçœ®æã§ãããå°æ¥çã«ã¯æçµçãªæ§æã«ã€ããŠæ±ºå®ããå¿ èŠããããåæã«æ¢åã®ã³ãŒããšã®ç«¶åãç°¡åã«åé¿ã§ããããšãææããå¿ èŠããããŸãã 1ã€ãŸãã¯2ã€ã®ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸãæ°ããããŒã¯ãŒãã«åæ§ã®åœ¢åŒã䜿çšããããšããå§ãããŸããããã®ãœãªã¥ãŒã·ã§ã³ã¯çŸãããšã¯èšããŸããããã®å Žåãéåžžã®æ°ããããŒã¯ãŒããšæ··åãããããã§ãã
ãããã£ãŠã1ã€ä»¥äžã®ãå€ããããŒã¯ãŒããŸãã¯äºçŽæžã¿èå¥åã䜿çšãããã€ãã³ã䜿çšããŠäœæãããããŒã¯ãŒãã䜿çšããããšããå§ãããŸãã
å¶éãããããŒã¯ãŒããšã¯ç°ãªãããã®ã¢ãããŒãã§ã¯æ§æ解æã®åé¡ãã¯ããã«å°ãªããªããŸããããã¯ïŒä»¥äž-äŸïŒ not-nullãæžç®åŒãšæ··åããããšãã§ãããã¬ã¯ãµãŒã¯abã 3ããŒã¯ã³ã1ããŒã¯ã³ããåžžã«å€æã§ããããã§ãã ããã«ãããæ¢åã®ãœãŒã¹ã³ãŒããŸãã¯äºãã«ç«¶åããå¯èœæ§ãã¯ããã«äœãããŒã¯ãŒããäœæããããã®æ°ããæ©äŒãéãããŠããŸãã ããã«ãèšèªã®äœæè ãJavaã«è¿œå ããããã®ã®å€ãã¯ããã®äžã®æ¢åã®èšèªæ§æèŠçŽ ïŒããšãã°ã énull ïŒã«åºã¥ããŠãããããæå³ã®ããååãæã€å¯èœæ§ãã¯ããã«é«ããªããŸã ã
æ°ããããŒã¯ãŒãã®äŸãšããŠãæ°ããããŒã¯ãŒãã®å Žæã®åè£ãæããããŸãïŒèè ã«ãããšãçŸæç¹ã§ã¯ãã®ãªã¹ãã¯çŽç²ã«äŸç€ºçãªãã®ã§ãïŒã
- éãã« ;
- éæçµ ;
-package-private ïŒããã©ã«ãã§ã¯ã¯ã©ã¹ã®ã¡ã³ããŒãžã®ã¢ã¯ã»ã¹ã¬ãã«ã®ä¿®é£ŸåãçŸåšã©ã®ãããªæ¹æ³ã§ã瀺ãããŠããŸããïŒã
- ãããªãã¯ãªãŒã ïŒãããªãã¯ãªãŒãããã©ã€ããŒãã¬ã³ãŒãã£ã³ã°ïŒ;
-nullãã§ãã¯æžã¿ ;
-type -static ïŒ Valhallaã«å¿ èŠãªæŠå¿µãã¯ã©ã¹èªäœã§ã¯ãªããã¯ã©ã¹ã®ç¹å®ã®ç¹æ®åã«é¢é£ããéçã瀺ããŸãïŒ;
- ããã©ã«ãå€ ;
- æçµçã«æçµ ïŒçŸåšã¯å®å®ãã泚éã䜿çšããŠè¡ãããããšã«ãªã£ãŠãããã®ïŒã
- æºæ±ºå ïŒ ã·ãŒã«ãã®ä»£ãããšããŠïŒ;
- ç¶²çŸ çã¹ã€ãã ;
-enum-class ã annotation-class ã record-class ïŒèšèªã®äœæè ã¯ã enumããã³interfaceã®ä»£ããã«ãããã®ããŒã¯ãŒãã䜿çšã§ããŸãïŒããããæ©äŒãããå ŽåïŒã
-this-class ïŒçŸåšã®ã¯ã©ã¹ã®ã¯ã©ã¹ãªãã©ã«ãèšè¿°ããããïŒ;
-this-return ïŒå€ãã®å Žåãsetter / method-builderãåä¿¡è ãè¿ãããã«ããŒã¯ããæ¹æ³ãè¿œå ããããã«èŠæ±ãããŸãïŒã
確ãã«åå¥äœç³»ã«ã¯ä»ã®å€åœ¢ããããããã«åŸã£ãŠããã§ã«ãœãŒã¹ã³ãŒãã«æžãããŠãããã®ãšæå°éã«éè€ããããã«ããŒã¯ãŒããæ§æããããšãå¯èœã§ãã ææ¡ããããã€ãã³ã¯ãè»ãšäººéã®äž¡æ¹ã«ãšã£ãŠååã«èªã¿ãããã§ãã
ãã®ã¢ãããŒãã¯ã以åã«äœ¿çšããããã®ãšäžç·ã«äœ¿çšããå¯èœæ§ã決ããŠæé€ããªãããããããšäžç·ã«äœ¿çšãããããšãç解ãããã