Files
YukiHookAPI/docs/api/public/ReflectionFactory.md

9.0 KiB

ReflectionFactory - kt

变更记录

v1.0 添加

功能描述

这是自定义 MemberClass 相关功能的查找匹配以及 invoke 的封装类。

MembersType - class

enum class MembersType

变更记录

v1.0.93 新增

功能描述

定义一个 Class 中的 Member 类型

ALL - enum

ALL

变更记录

v1.0.93 新增

功能描述

全部 MethodConstructor

METHOD - enum

METHOD

变更记录

v1.0.93 新增

功能描述

全部 Method

CONSTRUCTOR - enum

CONSTRUCTOR

变更记录

v1.0.93 新增

功能描述

全部 Constructor

hookClass - field

变更记录

v1.0 添加

v1.0.93 移除

HookClass 相关功能不再对外开放

normalClass - field

变更记录

v1.0 添加

v1.0.93 移除

HookClass 相关功能不再对外开放

hasClass - field

变更记录

v1.0 添加

v1.0.93 移除

请直接使用 hasClass() 无参方法

Class.hasExtends - ext-field

val Class<*>.hasExtends: Boolean

变更记录

v1.0.80 新增

功能描述

当前 Class 是否有继承关系,父类是 Any 将被认为没有继承关系。

classOf - method

变更记录

v1.0 添加

v1.0.93 移除

请转到 toClass(...) 方法

String.toClass - ext-method

fun String.toClass(loader: ClassLoader?): Class<*>

变更记录

v1.0.93 新增

功能描述

通过字符串类名转换为 loader 中的实体类。

功能示例

你可以直接填写你要查找的目标 Class,必须在默认 ClassLoader 下存在。

示例如下

"com.example.demo.DemoClass".toClass()

你还可以自定义 Class 所在的 ClassLoader

示例如下

val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
"com.example.demo.DemoClass".toClass(customClassLoader)

classOf - method

inline fun <reified T> classOf(loader: ClassLoader?): Class<*>

变更记录

v1.0.93 新增

功能描述

通过 T 得到其 Class 实例并转换为实体类。

功能示例

我们要获取一个 ClassKotlin 下不通过反射时应该这样做。

示例如下

DemoClass::class.java

现在,你可以直接 cast 一个实例并获取它的 Class 对象,必须在当前 ClassLoader 下存在。

示例如下

classOf<DemoClass>()

若目标存在的 Classstub,通过这种方式,你还可以自定义 Class 所在的 ClassLoader

示例如下

val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
classOf<DemoClass>(customClassLoader)

String.hasClass - ext-method

fun String.hasClass(loader: ClassLoader?): Boolean

变更记录

v1.0 添加

v1.0.93 修改

支持直接使用空参数方法使用默认 ClassLoader 进行判断

功能描述

通过字符串类名使用指定的 ClassLoader 查找是否存在。

功能示例

你可以轻松的使用此方法判断字符串中的类是否存在,效果等同于直接使用 Class.forName

示例如下

if("com.example.demo.DemoClass".hasClass()) {
    // Your code here.
}

填入方法中的 loader 参数可判断指定的 ClassLoader 中的 Class 是否存在。

示例如下

val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
if("com.example.demo.DemoClass".hasClass(customClassloader)) {
    // Your code here.
}

Class.hasField - ext-method

inline fun Class<*>.hasField(initiate: FieldCondition): Boolean

变更记录

v1.0.4 新增

v1.0.67 修改

合并到 FieldFinder

v1.0.80 修改

将方法体进行 inline

功能描述

查找变量是否存在。

Class.hasMethod - ext-method

inline fun Class<*>.hasMethod(initiate: MethodCondition): Boolean

变更记录

v1.0 添加

v1.0.1 修改

新增 returnType 参数

v1.0.67 修改

合并到 MethodFinder

v1.0.80 修改

将方法体进行 inline

功能描述

查找方法是否存在。

Class.hasConstructor - ext-method

inline fun Class<*>.hasConstructor(initiate: ConstructorCondition): Boolean

变更记录

v1.0.2 新增

v1.0.67 修改

合并到 ConstructorFinder

v1.0.80 修改

将方法体进行 inline

功能描述

查找构造方法是否存在。

Member.hasModifiers - ext-method

inline fun Member.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean

变更记录

v1.0.67 新增

v1.0.80 修改

将方法体进行 inline

功能描述

查询 Member 中匹配的描述符。

Class.hasModifiers - ext-method

inline fun Class<*>.hasModifiers(initiate: ModifierRules.() -> Unit): Boolean

变更记录

v1.0.93 新增

功能描述

查询 Class 中匹配的描述符。

obtainStaticFieldAny - method

变更记录

v1.0 添加

v1.0.1 移除

obtainFieldAny - method

变更记录

v1.0 添加

v1.0.1 移除

modifyStaticField - method

变更记录

v1.0 添加

v1.0.1 移除

modifyField - method

变更记录

v1.0 添加

v1.0.1 移除

Class.field - ext-method

inline fun Class<*>.field(initiate: FieldCondition): FieldFinder.Result

变更记录

v1.0.2 新增

v1.0.80 修改

将方法体进行 inline

功能描述

查找并得到变量。

Class.method - ext-method

inline fun Class<*>.method(initiate: MethodCondition): MethodFinder.Result

变更记录

v1.0 添加

v1.0.1 修改

obtainMethod 更名为 method

新增 returnType 参数

v1.0.2 修改

合并到 MethodFinder 方法体

v1.0.80 修改

将方法体进行 inline

功能描述

查找并得到方法。

Class.constructor - ext-method

inline fun Class<*>.constructor(initiate: ConstructorCondition): ConstructorFinder.Result

变更记录

v1.0 添加

v1.0.1 修改

obtainConstructor 更名为 constructor

v1.0.2 修改

合并到 ConstructorFinder 方法体

v1.0.80 修改

将方法体进行 inline

功能描述

查找并得到构造方法。

callStatic - method

变更记录

v1.0 添加

v1.0.1 修改

invokeStatic 更名为 callStatic

v1.0.2 移除

call - method

变更记录

v1.0 添加

v1.0.1 修改

invokeAny 更名为 call

v1.0.2 移除

Any.current - ext-method

inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T

变更记录

v1.0.70 新增

v1.0.93 新增

新增 ignored 参数,可以忽略在 CurrentClass 中出现的异常

新增不使用 current { ... } 调用域直接使用 current() 得到实例的类操作对象

功能描述

获得当前实例的类操作对象。

Class.buildOfAny - ext-method

变更记录

v1.0.70 新增

v1.0.80 修改

将方法体进行 inline

v1.0.93 作废

请转移到 buildOf 方法

Class.buildOf - ext-method

inline fun Class<*>.buildOf(vararg param: Any?, initiate: ConstructorCondition): Any?
inline fun <T> Class<*>.buildOf(vararg param: Any?, initiate: ConstructorCondition): T?

变更记录

v1.0.70 新增

v1.0.80 修改

将方法体进行 inline

v1.0.93 修改

加入无泛型方法 buildOf

功能描述

通过构造方法创建新实例,指定类型 T 或任意类型 Any

Class.allMethods - ext-method

inline fun Class<*>.allMethods(result: (index: Int, method: Method) -> Unit)

变更记录

v1.0.70 新增

v1.0.80 修改

将方法体进行 inline

功能描述

遍历当前类中的所有方法。

Class.allConstructors - ext-method

inline fun Class<*>.allConstructors(result: (index: Int, constructor: Constructor<*>) -> Unit)

变更记录

v1.0.70 新增

v1.0.80 修改

将方法体进行 inline

功能描述

遍历当前类中的所有构造方法。

Class.allFields - ext-method

inline fun Class<*>.allFields(result: (index: Int, field: Field) -> Unit)

变更记录

v1.0.70 新增

v1.0.80 修改

将方法体进行 inline

功能描述

遍历当前类中的所有变量。