For methods handling we are going to use Methods component; Methods component uses to cache all methods and all method handles for faster access.
import static org.burningwave.core.assembler.StaticComponentContainer.Classes; import static org.burningwave.core.assembler.StaticComponentContainer.Methods; import java.lang.invoke.MethodHandle; import java.lang.reflect.Method; import java.nio.ByteBuffer; import java.security.ProtectionDomain; import java.util.Collection; import org.burningwave.core.classes.MethodCriteria; @SuppressWarnings("unused") public class MethodsHandler { public static void execute() { //Invoking method by using reflection Methods.invoke(System.out, "println", "Hello World"); //Invoking static method by using MethodHandle Integer number = Methods.invokeStaticDirect(Integer.class, "valueOf", 1); //Invoking method by using MethodHandle Methods.invokeDirect(System.out, "println", number); //Filtering and obtaining a MethodHandle reference MethodHandle methodHandle = Methods.findFirstDirectHandle( MethodCriteria.byScanUpTo((cls) -> //We only analyze the ClassLoader class and not all of its hierarchy (default behavior) cls.getName().equals(ClassLoader.class.getName()) ).name( "defineClass"::equals ).and().parameterTypes(params -> params.length == 3 ).and().parameterTypesAreAssignableFrom( String.class, ByteBuffer.class, ProtectionDomain.class ).and().returnType((cls) -> cls.getName().equals(Class.class.getName()) ), ClassLoader.class ); //Filtering and obtaining all methods of ClassLoader class that have at least //one input parameter of Class type Collection<Method> methods = Methods.findAll( MethodCriteria.byScanUpTo((cls) -> //We only analyze the ClassLoader class and not all of its hierarchy (default behavior) cls.getName().equals(ClassLoader.class.getName()) ).parameter((params, idx) -> { return Classes.isAssignableFrom(params[idx].getType(), Class.class); }), ClassLoader.class ); methods.stream(); } public static void main(String[] args) { execute(); } }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4