ΠΡΡ ΠΎΡΠ·ΡΠ²Ρ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ get Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅ΠΊΡΡΠΈΠ΅ Π³ΠΎΠ»ΠΎΡΠ° 2 :+1: ΠΈ 7 :-1:. ΠΡΠΈΠΌΠ΅ΠΌ ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π΅ΡΠ»ΠΈ Π² Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΠ΅ 24 ΡΠ°ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π³ΠΎΠ»ΠΎΡΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π². Discord Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°Π΅Ρ ΡΠΌΠΎΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠΈ.
Π― ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Ρ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ get
.
ΠΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ JDK ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠΎΠΌΡ.
ΠΡΡΡ Π»ΠΈ Ρ jdk ΠΏΡΠ΅ΡΠΈΠΊΡ get
, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠ΅ΡΡΠ΅Ρ? ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΈΡ
Π½Π° ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠ΅ΡΡΠ΅Ρ, ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π½Π΅Ρ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠ² get
, Π½ΠΎ Ρ Π½ΠΈΡ
Π½Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π½Π΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΡΠ°Π½ΠΈΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ
.
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΎΠ²ΡΠ΅ Π³Π΅ΡΡΠ΅ΡΡ jdk ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΡ get
, Π° Π΄ΡΡΠ³ΠΈΠ΅ β Π½Π΅Ρ. Π―ΡΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ java.lang.invoke.CallSite
, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ Π² jdk 7, ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ invokedynamic bytecode, Π³Π΄Π΅ Π΅ΡΡΡ Π³Π΅ΡΡΠ΅Ρ MethodType type()
ΠΈ Π³Π΅ΡΡΠ΅Ρ MethodHandle getTarget()
( ΡΠΈΠΏ ΠΎΠ΄ΠΈΠ½ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ, Π° ΡΠ΅Π»Π΅Π²ΠΎΠΉ β ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ; ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ setTarget(MethodHandle)
). Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΠ΅ API ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡ get
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Class.getModule
ΠΈΠ· java 9.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ JDK Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, ΡΡΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ mutable ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ - ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² Π½ΠΎΠ²ΡΡ Π·Π°ΠΏΠΈΡΡΡ , Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ Π³Π΅ΡΡΠ΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ΅ΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ JDK Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, ΡΡΠΎ Π½Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ mutable ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ - ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π² Π½ΠΎΠ²ΡΡ Π·Π°ΠΏΠΈΡΡΡ , Π½Π΅ ΠΈΠΌΠ΅ΡΡΠΈΡ Π³Π΅ΡΡΠ΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΡΡΠ΅ΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ.