public class LambdaMetafactory extends Object
ããããåé©å¿ãšåŒæ°ã®éšåè©äŸ¡ã®åŸã«ãæå®ãããMethodHandleãžã®å§è²ã«ãã£ãŠã1ã€ä»¥äžã®ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããåçŽãªé¢æ°ãªããžã§ã¯ãã®äœæã容æã«ããã¡ãœããã ãããã®ã¡ãœããã¯äžè¬ã«ãinvokedynamicã³ãŒã«ã»ãµã€ãã®ããŒãã¹ãã©ããã»ã¡ãœãããšããŠäœ¿çšãããJavaããã°ã©ãã³ã°èšèªã®ã©ã ãåŒããã³ã¡ãœããåç
§åŒæ©èœããµããŒãããŸãã
æäŸãããMethodHandleã«ãã£ãŠæå®ãããåäœãžã®éæ¥ã¢ã¯ã»ã¹ã¯ã3ã€ã®ãã§ãŒãºã§é çªã«é²è¡ããŸãã
CallSiteãçæããŸãã ãªã³ã±ãŒãžã§ã¯ãã¿ãŒã²ããã»ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããæ°ããã¯ã©ã¹ãåçã«ããŒããããããšããããŸãã CallSiteã¯é¢æ°ãªããžã§ã¯ãã®ãã¡ã¯ããªãšèŠãªãããšãã§ããããããããã®ãªã³ã±ãŒãžã»ã¡ãœããã¯ã¡ã¿ãã¡ã¯ããªãšåŒã°ããŸãã CallSiteã®ã¿ãŒã²ãããåŒã³åºããããšãã«çºçã(äžè¬çã«invokedynamicã³ãŒã«ã»ãµã€ãã«ãã£ãŠ)ã颿°ãªããžã§ã¯ããçæããŸãã ããã¯ãåäžãã¡ã¯ããªCallSiteã«å¯ŸããŠäœåºŠãçºçããå ŽåããããŸãã ãã£ããã£ã§ã¯ãæ°ãã颿°ãªããžã§ã¯ããå²ãåœãŠãããããæ¢åã®é¢æ°ãªããžã§ã¯ããè¿ãããããããšããããŸãã åäœMethodHandleã«ã¯ãæå®ãããã€ã³ã¿ãã§ãŒã¹ã»ã¡ãœããã®ãã©ã¡ãŒã¿ä»¥å€ã«è¿œå ãã©ã¡ãŒã¿ãæå®ãããå ŽåããããŸãããããã¯ãã£ããã£ã»ãã©ã¡ãŒã¿ãšåŒã°ããCallSiteã¿ãŒã²ãããžã®åŒæ°ãšããŠæå®ãããå¿
èŠããããåäœMethodHandleã«æ©æãã€ã³ããããå ŽåããããŸãã ãã£ããã£ã»ãã©ã¡ãŒã¿ã®æ°ããã³åã¯ãªã³ã±ãŒãžäžã«æ±ºå®ãããŸãã MethodHandleã«ãã£ãŠåç
§ãããã¡ãœããã¯ãMethodHandle.invoke(Object...)ã«ããå Žåãšåæ§ã«ããã£ããã£åŒæ°ãšåŒåºãã§æå®ããã远å åŒæ°ã䜿çšããŠåŒã³åºãããŸãã åŒåºãã§èš±å¯ãããå
¥åãŸãã¯çµæã®ã»ãããå¶éããããšã䟿å©ãªå ŽåããããŸãã ããšãã°ããžã§ããªãã¯ã»ã€ã³ã¿ãã§ãŒã¹Predicate<T>ãPredicate<String>ãšããŠãã©ã¡ãŒã¿åããããšãã¯ãå
¥åã¯Stringã§ããå¿
èŠããããŸã(å®è£
ããã¡ãœãããä»»æã®Objectãèš±å¯ããŠããŠã)ã ãªã³ã±ãŒãžã§ã远å ã®MethodTypeãã©ã¡ãŒã¿ãã€ã³ã¹ã¿ã³ã¹åãããã¡ãœããåãèšè¿°ãããšããŸãããããšåŒåºãã§ãåŒæ°ãšæçµçãªçµæããã®MethodTypeã«åºã¥ããŠãã§ãã¯ãããŸãã
ãã®ã¯ã©ã¹ã¯2ã€ã®åœ¢åŒã®ãªã³ã±ãŒãžã»ã¡ãœãããæäŸããŸããæé©åããããããã³ã«ã䜿çšããæšæºç(metafactory(MethodHandles.Lookup, String, MethodType, MethodType, MethodHandle, MethodType))ãšã代æ¿ç(altMetafactory(MethodHandles.Lookup, String, MethodType, Object...))ã§ãã 代æ¿çã¯æšæºçã®äžè¬åãããã®ã§ããã©ã°ããã³è¿œå åŒæ°ãä»ããŠçæããã颿°ãªããžã§ã¯ãã®åäœã«å¯Ÿãã远å å¶åŸ¡ãæäŸããŸãã 代æ¿çã§ã¯ã颿°ãªããžã§ã¯ãã®æ¬¡ã®å±æ§ã管çããæ©èœã远å ãããŸãã
FLAG_BRIDGESã¯ã远å ã®MethodTypeã®ãªã¹ããæäŸãããããšã瀺ããŸã(ãããããçµæã®é¢æ°ãªããžã§ã¯ãã«ãã£ãŠå®è£
ããã)ã ãããã®ã¡ãœããã¯åãååããã³ã€ã³ã¹ã¿ã³ã¹åãããåãå
±æããŸãã FLAG_MARKERSã¯ã远å ã€ã³ã¿ãã§ãŒã¹ã®ãªã¹ããæäŸãããããšã瀺ããŸã(ãããããçµæã®é¢æ°ãªããžã§ã¯ãã«ãã£ãŠå®è£
ããã)ã FLAG_SERIALIZABLEã䜿çšã§ããŸãã çŽååå¯èœé¢æ°ãªããžã§ã¯ãã¯ããã£ããã£ã»ã¯ã©ã¹(MethodHandles.Lookupã®ãã©ã¡ãŒã¿callerã«ãã£ãŠèšè¿°ãããã¯ã©ã¹)ããã®è¿œå æ¯æŽãå¿
èŠãšãããSerializedLambdaã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ããçŽåå圢åŒãšããŠäœ¿çšããŸãã詳现ã¯ãSerializedLambdaãåç
§ããŠãã ããã ãªã³ã±ãŒãžåŒæ°ã¯æ¬¡ã®ããšãåæãšããŸãã
invokedType (CallSiteã·ã°ããã£ãèšè¿°)ã¯ãå(D1..Dk)ããã³æ»ãåRdã®Kãã©ã¡ãŒã¿ãæã€ãsamMethodType (å®è£
ãããã¡ãœããåãèšè¿°)ã¯ãå(U1..Un)ããã³æ»ãåRuã®Nãã©ã¡ãŒã¿ãæã€ãimplMethod (å®è£
ãæäŸããMethodHandle)ã¯ãå(A1..Am)ããã³æ»ãåRaã®Mãã©ã¡ãŒã¿ãæã€(ã¡ãœãããã€ã³ã¹ã¿ã³ã¹ã»ã¡ãœãããèšè¿°ããå Žåããã®ã¡ãœããã»ãã³ãã«ã®ã¡ãœããåã¯ã¬ã·ãŒãã«å¯Ÿå¿ãã远å ã®æåã®åŒæ°ããã§ã«å«ã)ãinstantiatedMethodType (åŒåºãã§ã®å¶éãèš±å¯)ã¯ãå(T1..Tn)ããã³æ»ãåRtã®Nãã©ã¡ãŒã¿ãæã€ãããã«ã次ã®ãªã³ã±ãŒãžäžå€æ¡ä»¶ãä¿æããå¿ èŠããããŸãã
implMethodãçŽæ¥ã¡ãœããã»ãã³ãã«samMethodTypeããã³instantiatedMethodTypeãåãåŒæ°ã«ãŠã³ãNãæã€ãããã³i=1..Nã®å Žåã«Tiããã³UiãåãåããŸãã¯Tiããã³Uiãäž¡æ¹ãšãåç
§åãã€TiãUiã®ãµãã¿ã€ãããã«ããã£ããã£æã¯ãimplMethodãã€ã³ã¹ã¿ã³ã¹ã»ã¡ãœããã«å¯Ÿå¿ãããã£ããã£åŒæ°(K > 0)ãååšããæåã®ãã£ããã£åŒæ°(ã¬ã·ãŒãã«å¯Ÿå¿ãã)ã¯énullã§ããå¿
èŠããããŸãã
次ã®ããã«åQã¯Sã«é©å¿å¯èœãšèŠãªãããŸãã
| Q | S | ãªã³ã¯æãã§ã㯠| åŒåºãæãã§ã㯠|
|---|---|---|---|
| ããªããã£ã | ããªããã£ã | Qã¯ããªããã£ãã»ã¯ã€ããã³ã°å€æã§Sã«å€æå¯èœ | ãªã |
| ããªããã£ã | åç § | Sã¯Wrapper(Q)ã®ã¹ãŒããŒã¿ã€ã | Wrapper(Q)ããSã«ãã£ã¹ã |
| åç § | ããªããã£ã | ãã©ã¡ãŒã¿åã®å Žå: Qã¯ããªããã£ãã»ã©ãããŒãPrimitive(Q)ã¯Sã«ã¯ã€ããã³ã°å¯èœ æ»ãåã®å Žå: Qãããªããã£ãã»ã©ãããŒã®å Žåã¯Primitive(Q)ãSã«ã¯ã€ããã³ã°å¯èœãããã§ã㯠|
Qãããªããã£ãã»ã©ãããŒã§ãªãå ŽåãQãåºåºWrapper(S)ã«ãã£ã¹ããããšãã°ãæ°å€åã®å Žåã¯Number |
| åç § | åç § | for parameter types: S is a supertype of Q for return types:ãªã |
QããSã«ãã£ã¹ã |
å®è£ ã¡ãœããã®åŒæ°ãªã¹ããšã€ã³ã¿ãã§ãŒã¹ã»ã¡ãœããã®åŒæ°ãªã¹ãã¯ããã€ãã®ç¹ã§ç°ãªãå ŽåããããŸãã å®è£ ã¡ãœããã¯ãã©ã ãåŒã«ãã£ãŠãã£ããã£ãããåŒæ°ã«å¯Ÿå¿ããããã«è¿œå åŒæ°ãæã€å ŽåããããŸããåŒæ°ã«èš±å¯ãããé©å¿(ãã£ã¹ãããã¯ã·ã³ã°ãã¢ã³ãã¯ã·ã³ã°ãããªããã£ãã»ã¯ã€ããã³ã°ãªã©)ã«ããéããããå ŽåããããŸãã (å¯å€åŒæ°é©å¿ã¯ã¡ã¿ãã¡ã¯ããªã«ãã£ãŠæ±ãããŸããããããã¯åŒåºãå ã«ãã£ãŠæ±ãããããšãæåŸ ãããŸãã)
invokedynamicã³ãŒã«ã»ãµã€ãã«ã¯2ã€ã®åŒæ°ãªã¹ããéçåŒæ°ãªã¹ããšåçåŒæ°ãªã¹ãããããŸãã éçåŒæ°ãªã¹ãã¯å®æ°ããŒã«ã«æ ŒçŽãããŸãããåçåŒæ°ã¯ãã£ããã£æã«ãªãã©ã³ãã»ã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã ããŒãã¹ãã©ããã»ã¡ãœããã¯ãéçåŒæ°ãªã¹ãå šäœ(ãã®å Žåãå®è£ ã¡ãœãããã¿ãŒã²ããã»ã€ã³ã¿ãã§ãŒã¹ããã³ã¿ãŒã²ããã»ã€ã³ã¿ãã§ãŒã¹ã»ã¡ãœãããèšè¿°ããæ å ±ãå«ã)ãåçåŒæ°ã®æ°ãšéçãªå(ãã ãå€ã§ã¯ãªã)ããã³invokedynamicãµã€ãã®éçãªæ»ãåãèšè¿°ããã¡ãœããã»ã·ã°ããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã
| 修食åãšå | ãã£ãŒã«ã | 説æ |
|---|---|---|
static int |
FLAG_BRIDGES |
ã©ã ãã»ãªããžã§ã¯ãã远å ã®ããªããžã»ã¡ãœãããå¿
èŠãšããŠããããšã瀺ãã代æ¿ã¡ã¿ãã¡ã¯ããªçšã®ãã©ã°
|
static int |
FLAG_MARKERS |
ã©ã ãã»ãªããžã§ã¯ããSerializable以å€ã«ä»ã®ããŒã«ãŒã»ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããããšã瀺ãã代æ¿ã¡ã¿ãã¡ã¯ããªçšã®ãã©ã°
|
static int |
FLAG_SERIALIZABLE |
ã©ã ãã»ãªããžã§ã¯ããçŽååå¯èœã§ããå¿
èŠãããããšã瀺ãã代æ¿ã¡ã¿ãã¡ã¯ããªçšã®ãã©ã°
|
| ã³ã³ã¹ãã©ã¯ã¿ | 説æ |
|---|---|
LambdaMetafactory() |
| 修食åãšå | ã¡ãœãã | 説æ |
|---|---|---|
static CallSite |
altMetafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, Object... args) |
é©åãªåé©å¿ããã³åŒæ°ã®éšåè©äŸ¡ã®åŸãæå®ããã
MethodHandleãžã®å§è²ã«ããã1ã€ä»¥äžã®ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããåçŽãªé¢æ°ãªããžã§ã¯ãã®äœæã容æã«ããŸãã |
static CallSite |
metafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, MethodType samMethodType, MethodHandle implMethod, MethodType instantiatedMethodType) |
é©åãªåé©å¿ããã³åŒæ°ã®éšåè©äŸ¡ã®åŸãæå®ããã
MethodHandleãžã®å§è²ã«ããã1ã€ä»¥äžã®ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããåçŽãªé¢æ°ãªããžã§ã¯ãã®äœæã容æã«ããŸãã |
public static final int FLAG_SERIALIZABLE
public static final int FLAG_MARKERS
public static final int FLAG_BRIDGES
public static CallSite metafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, MethodType samMethodType, MethodHandle implMethod, MethodType instantiatedMethodType) throws LambdaConversionException
MethodHandleãžã®å§è²ã«ããã1ã€ä»¥äžã®ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããåçŽãªé¢æ°ãªããžã§ã¯ãã®äœæã容æã«ããŸãã äžè¬çã«invokedynamicã³ãŒã«ã»ãµã€ãã®ããŒãã¹ãã©ããã»ã¡ãœãããšããŠãJavaããã°ã©ãã³ã°èšèªã®ã©ã ãåŒããã³ã¡ãœããåç
§åŒæ©èœããµããŒãããããã«äœ¿çšãããŸãã
ããã¯æšæºã®ãåçåãããã¡ã¿ãã¡ã¯ããªã§ããaltMetafactory(MethodHandles.Lookup, String, MethodType, Object...)ã«ãã£ãŠããé«ãæè»æ§ãæäŸãããŸãã ãã®ã¡ãœããã®åäœã®æŠèŠã¯ãã§ã«èª¬ææžã§ãã
ãã®ã¡ãœããããè¿ãããCallSiteã®ã¿ãŒã²ãããåŒã³åºããããšãçµæã®é¢æ°ãªããžã§ã¯ãã¯ãinvokedTypeã®æ»ãåã§æå®ãããã€ã³ã¿ãã§ãŒã¹ãå®è£
ãããã€invokedNameã§æå®ãããååãšsamMethodTypeã§æå®ãããã·ã°ããã£ãæã€ã¡ãœããã宣èšãããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã Objectããã®è¿œå ã¡ãœããããªãŒããŒã©ã€ãããããšãã§ããŸãã
caller - åŒåºãå
ã®ã¢ã¯ã»ã¹å¯èœæ§æš©éãæã€ã«ãã¯ã¢ããã»ã³ã³ããã¹ãã衚ããŸãã invokedynamicã§äœ¿çšããããšãã¯ãããã¯VMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã invokedName - å®è£
ããã¡ãœããã®ååã invokedynamicã§äœ¿çšããããšãã¯ãããã¯InvokeDynamicæ§é ã®NameAndTypeã«ãã£ãŠæäŸãããVMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã invokedType - CallSiteã®æåŸ
ãããã·ã°ããã£ã ãã©ã¡ãŒã¿åã¯ãã£ããã£å€æ°ã®åã衚ããæ»ãåã¯å®è£
ããã€ã³ã¿ãã§ãŒã¹ã§ãã invokedynamicã§äœ¿çšããããšãã¯ãããã¯InvokeDynamicæ§é ã®NameAndTypeã«ãã£ãŠæäŸãããVMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã å®è£
ã¡ãœãããã€ã³ã¹ã¿ã³ã¹ã»ã¡ãœããã§ããã®ã·ã°ããã£ããã©ã¡ãŒã¿ãæã€å Žåã¯ãåŒåºãã·ã°ããã£ã®æåã®ãã©ã¡ãŒã¿ã¯ã¬ã·ãŒãã«å¯Ÿå¿ããå¿
èŠããããŸãã samMethodType - 颿°ãªããžã§ã¯ãã«ãã£ãŠå®è£
ãããã¡ãœããã®ã·ã°ããã£ããã³æ»ãåãimplMethod - åŒåºãã§(åŒæ°åããã³æ»ãåãé©åã«é©å¿ããããã£ããã£åŒæ°ã«åŒåºãåŒæ°ãä»å ãããç¶æ
ã§)åŒã³åºãããå®è£
ã¡ãœãããèšè¿°ããçŽæ¥ã¡ãœããã»ãã³ãã«ãinstantiatedMethodType - åŒåºãã§åçã«é©çšãããã·ã°ããã£ããã³æ»ãåã ããã¯ãsamMethodTypeãšåãå ŽåããŸãã¯ãã®ç¹æ®åã®å ŽåããããŸãã invokedTypeã§æå®ãããã€ã³ã¿ãã§ãŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ãçæã§ããLambdaConversionException - åè¿°ã®ãªã³ã±ãŒãžäžå€æ¡ä»¶ã«éåããå Žåpublic static CallSite altMetafactory(MethodHandles.Lookup caller, String invokedName, MethodType invokedType, Object... args) throws LambdaConversionException
MethodHandleãžã®å§è²ã«ããã1ã€ä»¥äžã®ã€ã³ã¿ãã§ãŒã¹ãå®è£
ããåçŽãªé¢æ°ãªããžã§ã¯ãã®äœæã容æã«ããŸãã äžè¬çã«invokedynamicã³ãŒã«ã»ãµã€ãã®ããŒãã¹ãã©ããã»ã¡ãœãããšããŠãJavaããã°ã©ãã³ã°èšèªã®ã©ã ãåŒããã³ã¡ãœããåç
§åŒæ©èœããµããŒãããããã«äœ¿çšãããŸãã
ããã¯äžè¬çã§ãæè»æ§ã®é«ãã¡ã¿ãã¡ã¯ããªã§ããåçåãããããŒãžã§ã³ãmetafactory(java.lang.invoke.MethodHandles.Lookup, String, MethodType, MethodType, MethodHandle, MethodType)ã«ãã£ãŠæäŸãããŸãã ãã®ã¡ãœããã®åäœã®æŠèŠã¯ãã§ã«èª¬ææžã§ãã
ãã®ã¡ãœããã®åŒæ°ãªã¹ãã«ã¯3ã€ã®åºå®ãã©ã¡ãŒã¿ãå«ãŸããinvokedynamicåŒåºãã§ããŒãã¹ãã©ããã»ã¡ãœããã®ããã«VMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ããããã©ã¡ãŒã¿ãšã远å ãã©ã¡ãŒã¿ãå«ãObject[]ãã©ã¡ãŒã¿ã«å¯Ÿå¿ããŠããŸãã ãã®ã¡ãœããã«å®£èšãããåŒæ°ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
CallSite altMetafactory(MethodHandles.Lookup caller,
String invokedName,
MethodType invokedType,
Object... args)
ããããåŒæ°ãªã¹ãã以äžã§ãããã®ããã«åäœããŸãã
CallSite altMetafactory(MethodHandles.Lookup caller,
String invokedName,
MethodType invokedType,
MethodType samMethodType,
MethodHandle implMethod,
MethodType instantiatedMethodType,
int flags,
int markerInterfaceCount, // IF flags has MARKERS set
Class... markerInterfaces, // IF flags has MARKERS set
int bridgeCount, // IF flags has BRIDGES set
MethodType... bridges // IF flags has BRIDGES set
)
metafactory(MethodHandles.Lookup, String, MethodType, MethodType, MethodHandle, MethodType)ã®åŒæ°ãªã¹ãå
ã®åŒæ°ã¯ããã®ã¡ãœããå
ãšåã仿§ãæã¡ãŸãã 远å åŒæ°ã¯æ¬¡ã®ããã«è§£éãããŸãã
flagsã¯è¿œå ãªãã·ã§ã³ã瀺ããŸããããã¯ãå¿
èŠãªãã©ã°ã®ãããåäœORã§ãã å®çŸ©æžãã©ã°ã¯FLAG_BRIDGESãFLAG_MARKERSããã³FLAG_SERIALIZABLEã§ãã markerInterfaceCountã¯é¢æ°ãªããžã§ã¯ããå®è£
ãã远å ã€ã³ã¿ãã§ãŒã¹ã®æ°ã§ãFLAG_MARKERSãã©ã°ãèšå®ãããŠããå Žåã«ã®ã¿ååšããŸããmarkerInterfacesã¯å®è£
ãã远å ã€ã³ã¿ãã§ãŒã¹ã®å¯å€é·ãªã¹ãã§ããã®é·ãã¯markerInterfaceCountãšçãããFLAG_MARKERSãã©ã°ãèšå®ãããŠããå Žåã«ã®ã¿ååšããŸããbridgeCountã¯é¢æ°ãªããžã§ã¯ããå®è£
ãã远å ã¡ãœããã»ã·ã°ããã£ã®æ°ã§ãFLAG_BRIDGESãã©ã°ãèšå®ãããŠããå Žåã«ã®ã¿ååšããŸããbridgesã¯å®è£
ãã远å ã¡ãœããã»ã·ã°ããã£ã®å¯å€é·ãªã¹ãã§ããã®é·ãã¯bridgeCountãšçãããFLAG_BRIDGESãã©ã°ãèšå®ãããŠããå Žåã«ã®ã¿ååšããŸããmarkerInterfacesã§æå®ãããåã¯ã©ã¹ã«ã¯ãåè¿°ã®invokedTypeã®æ»ãåãRdãšåãå¶éãé©çšãããŸãã bridgesã§æå®ãããåMethodTypeã«ã¯ãåè¿°ã®samMethodTypeãšåãå¶éãé©çšãããŸãã
flagsã«FLAG_SERIALIZABLEãèšå®ãããŠãããšãã颿°ãªããžã§ã¯ãã¯Serializableãå®è£
ããé©åãªSerializedLambdaãè¿ãwriteReplaceã¡ãœãããæã¡ãŸãã callerã¯ã©ã¹ã¯ãSerializedLambdaã§èª¬æãããšããé©åãª$deserializeLambda$ã¡ãœãããæã€å¿
èŠããããŸãã
ãã®ã¡ãœããããè¿ãããCallSiteã®ã¿ãŒã²ãããåŒã³åºããããšããçµæã®é¢æ°ãªããžã§ã¯ãã¯æ¬¡ã®ããããã£ãæã€ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã
invokedTypeã®æ»ãåã§æå®ãããã€ã³ã¿ãã§ãŒã¹ãšãmarkerInterfacesã§æå®ãããã€ã³ã¿ãã§ãŒã¹ãå®è£
ããŸããinvokedNameã§æå®ãããååãsamMethodTypeã§æå®ãããã·ã°ããã£ãããã³bridgesã§æå®ããã远å ã·ã°ããã£ã§ã¡ãœããã宣èšããŸããObjectããã®ã¡ãœããããªãŒããŒã©ã€ãã§ããçŽååã«é¢é£ããã¡ãœãããå®è£
ã§ããŸããcaller - åŒåºãå
ã®ã¢ã¯ã»ã¹å¯èœæ§æš©éãæã€ã«ãã¯ã¢ããã»ã³ã³ããã¹ãã衚ããŸãã invokedynamicã§äœ¿çšããããšãã¯ãããã¯VMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã invokedName - å®è£
ããã¡ãœããã®ååã invokedynamicã§äœ¿çšããããšãã¯ãããã¯InvokeDynamicæ§é ã®NameAndTypeã«ãã£ãŠæäŸãããVMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã invokedType - CallSiteã®æåŸ
ãããã·ã°ããã£ã ãã©ã¡ãŒã¿åã¯ãã£ããã£å€æ°ã®åã衚ããæ»ãåã¯å®è£
ããã€ã³ã¿ãã§ãŒã¹ã§ãã invokedynamicã§äœ¿çšããããšãã¯ãããã¯InvokeDynamicæ§é ã®NameAndTypeã«ãã£ãŠæäŸãããVMã«ãã£ãŠèªåçã«ã¹ã¿ãã¯ãããŸãã å®è£
ã¡ãœãããã€ã³ã¹ã¿ã³ã¹ã»ã¡ãœããã§ããã®ã·ã°ããã£ããã©ã¡ãŒã¿ãæã€å Žåã¯ãåŒåºãã·ã°ããã£ã®æåã®ãã©ã¡ãŒã¿ã¯ã¬ã·ãŒãã«å¯Ÿå¿ããå¿
èŠããããŸãã args - åè¿°ã®altMetafactory(MethodHandles.Lookup, String, MethodType, Object...)ã®èª¬æã®ãšãããå¿
èŠãªåŒæ°samMethodTypeãimplMethodãinstantiatedMethodTypeããã³flagsãšãªãã·ã§ã³åŒæ°ãå«ãObject[]é
åinvokedTypeã§æå®ãããã€ã³ã¿ãã§ãŒã¹ã®ã€ã³ã¹ã¿ã³ã¹ãçæã§ããLambdaConversionException - åè¿°ã®ãªã³ã±ãŒãžäžå€æ¡ä»¶ã«éåããå Žå ãã°ãŸãã¯æ©èœãéä¿¡
詳现ãªAPIãªãã¡ã¬ã³ã¹ããã³éçºè
ããã¥ã¡ã³ãã«ã€ããŠã¯ãJava SEã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®ããã¥ã¡ã³ãã«ã¯ãæŠå¿µçãªæŠèŠãçšèªã®å®çŸ©ãåé¿æ¹æ³ãæå¹ãªã³ãŒãäŸãªã©ã®ãéçºè
ã察象ã«ãããã詳现ãªèª¬æãå«ãŸããŠããŸãã
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyãåç
§ããŠãã ããã