ReflectUtil

Lightweight utility for fast reflective access using VarHandle, MethodHandle and LambdaMetafactory.

Usage examples:

// VarHandle read/write
VarHandle vh = ReflectUtil.findVarHandle(MyClass.class, "value", int.class);
int v = (int) ReflectUtil.vhGet(vh, myObj);
ReflectUtil.vhSet(vh, myObj, 123);

// Method handle invoke
MethodHandle mh = ReflectUtil.findMethodHandle(MyClass.class, "compute", int.class);
Object result = ReflectUtil.invoke(mh, myObj, 5);
*

Functions

Link copied to clipboard
fun exist(object: Any, fieldName: String): Boolean
fun exist(object: Any, fieldName: String, fieldType: Class<*>): Boolean

Check if a field exists in a class

Link copied to clipboard
fun findFirstVarHandle(target: Class<*>, fieldType: Class<*>?): VarHandle?

Find and cache the first varhandle in a class with a specified field type.

Link copied to clipboard
fun get(object: Any, fieldName: String): Result<*>
fun get(object: Any, fieldName: String, fieldType: Class<*>): Result<*>

Get a field in a class

Link copied to clipboard
fun getPossibleClassFromNames(vararg names: String): Result<Class<*>?>

Try to get a class from possible names.

Link copied to clipboard
fun <T> getT(object: Any, fieldName: String): Result<T?>
fun <T> getT(object: Any, fieldName: String, fieldType: Class<T?>): Result<T?>
Link copied to clipboard
fun invoke(caller: Any, name: String): Result<*>
fun invoke(caller: Any, name: String, vararg args: Any?): Result<*>
Link copied to clipboard
fun invokeWithParamType(caller: Any, name: String, paramTypes: MutableList<Class<*>>, vararg args: Any?): Result<*>
Link copied to clipboard
fun <T> methodAsFunctional(funcInterface: Class<T>, target: Class<*>, methodName: String, vararg paramTypes: Class<*>): Result<T?>
Link copied to clipboard
fun <T> newInstance(target: Class<T>, vararg args: Any?): Result<T?>
Link copied to clipboard
fun set(object: Any, fieldName: String, value: Any?): Result<*>

fun set(object: Any, fieldName: String, fieldType: Class<*>, value: Any?): Result<*>

Set a field in a class

Link copied to clipboard
fun <T> setT(object: Any, fieldName: String, value: T?): Result<*>
fun <T> setT(object: Any, fieldName: String, fieldType: Class<T?>, value: T?): Result<*>