diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md index a1378948..34bc6db3 100644 --- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md +++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.md @@ -250,6 +250,26 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade "com.example.demo.DemoClass".toClass(customClassLoader) ``` +## String.toClassOrNull - ext-method + +```kotlin:no-line-numbers +fun String.toClassOrNull(loader: ClassLoader?): Class<*>? +``` + +**变更记录** + +`v1.1.0` `新增` + +**功能描述** + +> 通过字符串类名转换为 `loader` 中的实体类。 + +找不到 `Class` 会返回 `null`,不会抛出异常。 + +**功能示例** + +用法请参考 [String.toClass](#string-toclass-ext-method) 方法。 + ## classOf - method ```kotlin:no-line-numbers diff --git a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md index 1249f2f7..8249b17b 100644 --- a/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md +++ b/docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/PackageParam.md @@ -574,6 +574,32 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").toClass(customClassLoader) ``` +## String+VariousClass.toClassOrNull - i-ext-method + +```kotlin:no-line-numbers +fun String.toClassOrNull(loader: ClassLoader?): Class<*>? +``` + +```kotlin:no-line-numbers +fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>? +``` + +**变更记录** + +`v1.1.0` `新增` + +**功能描述** + +> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。 + +默认使用当前 `appClassLoader` 装载目标 `Class`。 + +找不到 `Class` 会返回 `null`,不会抛出异常。 + +**功能示例** + +用法请参考 [String+VariousClass.toClass](#string-variousclass-toclass-i-ext-method) 方法。 + ## String.hasClass - i-ext-method ```kotlin:no-line-numbers diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt index b43ddf29..8170d85d 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/factory/ReflectionFactory.kt @@ -111,6 +111,15 @@ fun classOf(name: String, loader: ClassLoader? = null) = name.toClass(loader) */ fun String.toClass(loader: ClassLoader? = null) = ReflectionTool.findClassByName(name = this, loader) +/** + * 通过字符串类名转换为 [loader] 中的实体类 + * + * 找不到 [Class] 会返回 null - 不会抛出异常 + * @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader] + * @return [Class] or null + */ +fun String.toClassOrNull(loader: ClassLoader? = null) = runCatching { toClass(loader) }.getOrNull() + /** * 通过 [T] 得到其 [Class] 实例并转换为实体类 * @param loader [Class] 所在的 [ClassLoader] - 默认空 - 可不填 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt index 8be55a73..c993bcde 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/PackageParam.kt @@ -356,6 +356,15 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: */ fun String.toClass(loader: ClassLoader? = appClassLoader) = ReflectionTool.findClassByName(name = this, loader) + /** + * 通过字符串类名转换为 [loader] 中的实体类 + * + * 找不到 [Class] 会返回 null - 不会抛出异常 + * @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader] + * @return [Class] or null + */ + fun String.toClassOrNull(loader: ClassLoader? = appClassLoader) = runCatching { toClass(loader) }.getOrNull() + /** * [VariousClass] 转换为 [loader] 中的实体类 * @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader] @@ -364,6 +373,15 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper: */ fun VariousClass.toClass(loader: ClassLoader? = appClassLoader) = get(loader) + /** + * [VariousClass] 转换为 [loader] 中的实体类 + * + * 匹配不到 [Class] 会返回 null - 不会抛出异常 + * @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader] + * @return [Class] or null + */ + fun VariousClass.toClassOrNull(loader: ClassLoader? = appClassLoader) = runCatching { toClass(loader) }.getOrNull() + /** * 通过字符串类名查找是否存在 * @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]