package Ġcom . ice c ream qa q . test . yu Ċ Ċ import Ġcom . Ice C ream Q AQ . Yu . hook . Hook Item Ċ import Ġcom . Ice C ream Q AQ . Yu . hook . Hook Method Ċ import Ġcom . Ice C ream Q AQ . Yu . hook . Hook Runnable Ċ import Ġcom . Ice C ream Q AQ . Yu . hook . Yu Hook Ċ import Ġcom . Ice C ream Q AQ . Yu . loader . App Class loader ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠY u Hook . put ( Hook Item (" com . ice c ream qa q . test . yu . Ta ", Ġ" g ", Ġ" com . ice c ream qa q . test . yu . Hook Ta ")) ĊĊĠĠĠ Ġval Ġapp ClassLoader Ġ= ĠApp Class loader ( Test Starter :: class . java . class Loader ) ĊĊĠĠĠ Ġval Ġt ac Ġ= Ġapp ClassLoader . load Class (" com . ice c ream qa q . test . yu . Ta ") ĊĠĠĠ Ġval Ġta Ġ= Ġt ac . newInstance () ĊĊĠĠĠ Ġval Ġg Ġ= Ġt ac . getMethod (" g ") Ċ // ĠĠĠ Ġval Ġg Ġ= Ġt ac . getMethod (" g ", ĠInt :: class . java , ĠInt :: class . java ) ĊĊĠĠĠ Ġprintln ( g . invoke ( ta )) Ċ } Ċ Ċ class ĠTa Ġ{ ĊĠĠĠ Ġ// ĠĠĠ Ġcompanion Ġobject { Ċ // ĠĠĠĠĠĠĠ Ġ@ Jvm Static Ċ // Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġg () Ġ= Ġ 2 . to Long () Ċ } ĊĊ Ċ class ĠHook Ta Ġ: ĠHook Runnable Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġpre Run ( method : ĠHook Method ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmethod . result Ġ= Ġ 3 . to Long () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost Run ( method : ĠHook Method ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( method : ĠHook Method ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ