mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Modify add "initialize" param in classOf, toClass, toClassOrNull, get, getOrNull function in ReflectionFactory, PackageParam, VariousClass
This commit is contained in:
@@ -31,13 +31,17 @@ class VariousClass(private vararg val name: String)
|
|||||||
## get <span class="symbol">- method</span>
|
## get <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun get(loader: ClassLoader? = null): Class<*>
|
fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
|
|
||||||
`v1.0.70` `added`
|
`v1.0.70` `added`
|
||||||
|
|
||||||
|
`v1.1.5` `modified`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 获取匹配的实体类。
|
> 获取匹配的实体类。
|
||||||
@@ -47,13 +51,17 @@ fun get(loader: ClassLoader? = null): Class<*>
|
|||||||
## getOrNull <span class="symbol">- method</span>
|
## getOrNull <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun getOrNull(loader: ClassLoader? = null): Class<*>?
|
fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
|
|
||||||
`v1.1.0` `added`
|
`v1.1.0` `added`
|
||||||
|
|
||||||
|
`v1.1.5` `modified`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 获取匹配的实体类。
|
> 获取匹配的实体类。
|
||||||
|
@@ -409,11 +409,11 @@ fun Class<*>.toJavaPrimitiveType(): Class<*>
|
|||||||
## String.toClass <span class="symbol">- ext-method</span>
|
## String.toClass <span class="symbol">- ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClass(loader: ClassLoader?): Class<*>
|
fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -424,6 +424,8 @@ inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 通过字符串类名转换为 `loader` 中的实体类。
|
> 通过字符串类名转换为 `loader` 中的实体类。
|
||||||
@@ -456,14 +458,40 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade
|
|||||||
"com.example.demo.DemoClass".toClass<DemoClass>()
|
"com.example.demo.DemoClass".toClass<DemoClass>()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
你还可以设置在获取到这个 `Class` 时是否自动执行其默认的静态方法块,默认情况下不会执行。
|
||||||
|
|
||||||
|
> The following example
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// 获取并执行 DemoClass 默认的静态方法块
|
||||||
|
"com.example.demo.DemoClass".toClass(initialize = true)
|
||||||
|
```
|
||||||
|
|
||||||
|
默认的静态方法块在 Java 中使用如下方式定义。
|
||||||
|
|
||||||
|
> The following example
|
||||||
|
|
||||||
|
```java:no-line-numbers
|
||||||
|
public class DemoClass {
|
||||||
|
|
||||||
|
static {
|
||||||
|
// 这里是静态方法块的内容
|
||||||
|
}
|
||||||
|
|
||||||
|
public DemoClass() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## String.toClassOrNull <span class="symbol">- ext-method</span>
|
## String.toClassOrNull <span class="symbol">- ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -474,6 +502,8 @@ inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 通过字符串类名转换为 `loader` 中的实体类。
|
> 通过字符串类名转换为 `loader` 中的实体类。
|
||||||
@@ -487,7 +517,7 @@ inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
|||||||
## classOf <span class="symbol">- method</span>
|
## classOf <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> classOf(loader: ClassLoader?): Class<T>
|
inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -498,6 +528,8 @@ inline fun <reified T> classOf(loader: ClassLoader?): Class<T>
|
|||||||
|
|
||||||
将返回类型由 `Class<*>` cast 为 `Class<T>`
|
将返回类型由 `Class<*>` cast 为 `Class<T>`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 通过 `T` 得到其 `Class` 实例并转换为实体类。
|
> 通过 `T` 得到其 `Class` 实例并转换为实体类。
|
||||||
|
@@ -632,15 +632,15 @@ inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions):
|
|||||||
## String+VariousClass.toClass <span class="symbol">- i-ext-method</span>
|
## String+VariousClass.toClass <span class="symbol">- i-ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClass(loader: ClassLoader?): Class<*>
|
fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun VariousClass.toClass(loader: ClassLoader?): Class<*>
|
fun VariousClass.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -651,6 +651,8 @@ fun VariousClass.toClass(loader: ClassLoader?): Class<*>
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
||||||
@@ -685,6 +687,32 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade
|
|||||||
"com.example.demo.DemoClass".toClass<DemoClass>()
|
"com.example.demo.DemoClass".toClass<DemoClass>()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
你还可以设置在获取到这个 `Class` 时是否自动执行其默认的静态方法块,默认情况下不会执行。
|
||||||
|
|
||||||
|
> The following example
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// 获取并执行 DemoClass 默认的静态方法块
|
||||||
|
"com.example.demo.DemoClass".toClass(initialize = true)
|
||||||
|
```
|
||||||
|
|
||||||
|
默认的静态方法块在 Java 中使用如下方式定义。
|
||||||
|
|
||||||
|
> The following example
|
||||||
|
|
||||||
|
```java:no-line-numbers
|
||||||
|
public class DemoClass {
|
||||||
|
|
||||||
|
static {
|
||||||
|
// 这里是静态方法块的内容
|
||||||
|
}
|
||||||
|
|
||||||
|
public DemoClass() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
你还可以创建一个 `VariousClass`,并转换为实体类。
|
你还可以创建一个 `VariousClass`,并转换为实体类。
|
||||||
|
|
||||||
`VariousClass` 会枚举所有设置的 `Class` 并最终获得第一个存在的 `Class`。
|
`VariousClass` 会枚举所有设置的 `Class` 并最终获得第一个存在的 `Class`。
|
||||||
@@ -707,15 +735,15 @@ VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").toCla
|
|||||||
## String+VariousClass.toClassOrNull <span class="symbol">- i-ext-method</span>
|
## String+VariousClass.toClassOrNull <span class="symbol">- i-ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun VariousClass.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -726,6 +754,8 @@ fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>?
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
||||||
|
@@ -23,13 +23,17 @@ class VariousClass(private vararg val name: String)
|
|||||||
## get <span class="symbol">- method</span>
|
## get <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun get(loader: ClassLoader? = null): Class<*>
|
fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
|
|
||||||
`v1.0.70` `新增`
|
`v1.0.70` `新增`
|
||||||
|
|
||||||
|
`v1.1.5` `修改`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 获取匹配的实体类。
|
> 获取匹配的实体类。
|
||||||
@@ -39,13 +43,17 @@ fun get(loader: ClassLoader? = null): Class<*>
|
|||||||
## getOrNull <span class="symbol">- method</span>
|
## getOrNull <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun getOrNull(loader: ClassLoader? = null): Class<*>?
|
fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
|
|
||||||
`v1.1.0` `新增`
|
`v1.1.0` `新增`
|
||||||
|
|
||||||
|
`v1.1.5` `修改`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 获取匹配的实体类。
|
> 获取匹配的实体类。
|
||||||
|
@@ -401,11 +401,11 @@ fun Class<*>.toJavaPrimitiveType(): Class<*>
|
|||||||
## String.toClass <span class="symbol">- ext-method</span>
|
## String.toClass <span class="symbol">- ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClass(loader: ClassLoader?): Class<*>
|
fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -416,6 +416,8 @@ inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 通过字符串类名转换为 `loader` 中的实体类。
|
> 通过字符串类名转换为 `loader` 中的实体类。
|
||||||
@@ -448,14 +450,40 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade
|
|||||||
"com.example.demo.DemoClass".toClass<DemoClass>()
|
"com.example.demo.DemoClass".toClass<DemoClass>()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
你还可以设置在获取到这个 `Class` 时是否自动执行其默认的静态方法块,默认情况下不会执行。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// 获取并执行 DemoClass 默认的静态方法块
|
||||||
|
"com.example.demo.DemoClass".toClass(initialize = true)
|
||||||
|
```
|
||||||
|
|
||||||
|
默认的静态方法块在 Java 中使用如下方式定义。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```java:no-line-numbers
|
||||||
|
public class DemoClass {
|
||||||
|
|
||||||
|
static {
|
||||||
|
// 这里是静态方法块的内容
|
||||||
|
}
|
||||||
|
|
||||||
|
public DemoClass() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## String.toClassOrNull <span class="symbol">- ext-method</span>
|
## String.toClassOrNull <span class="symbol">- ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -466,6 +494,8 @@ inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 通过字符串类名转换为 `loader` 中的实体类。
|
> 通过字符串类名转换为 `loader` 中的实体类。
|
||||||
@@ -479,7 +509,7 @@ inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
|||||||
## classOf <span class="symbol">- method</span>
|
## classOf <span class="symbol">- method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> classOf(loader: ClassLoader?): Class<T>
|
inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -490,6 +520,8 @@ inline fun <reified T> classOf(loader: ClassLoader?): Class<T>
|
|||||||
|
|
||||||
将返回类型由 `Class<*>` cast 为 `Class<T>`
|
将返回类型由 `Class<*>` cast 为 `Class<T>`
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 通过 `T` 得到其 `Class` 实例并转换为实体类。
|
> 通过 `T` 得到其 `Class` 实例并转换为实体类。
|
||||||
|
@@ -624,15 +624,15 @@ inline fun searchClass(name: String, async: Boolean, initiate: ClassConditions):
|
|||||||
## String+VariousClass.toClass <span class="symbol">- i-ext-method</span>
|
## String+VariousClass.toClass <span class="symbol">- i-ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClass(loader: ClassLoader?): Class<*>
|
fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader?): Class<T>
|
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun VariousClass.toClass(loader: ClassLoader?): Class<*>
|
fun VariousClass.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -643,6 +643,8 @@ fun VariousClass.toClass(loader: ClassLoader?): Class<*>
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
||||||
@@ -677,6 +679,32 @@ val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoade
|
|||||||
"com.example.demo.DemoClass".toClass<DemoClass>()
|
"com.example.demo.DemoClass".toClass<DemoClass>()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
你还可以设置在获取到这个 `Class` 时是否自动执行其默认的静态方法块,默认情况下不会执行。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// 获取并执行 DemoClass 默认的静态方法块
|
||||||
|
"com.example.demo.DemoClass".toClass(initialize = true)
|
||||||
|
```
|
||||||
|
|
||||||
|
默认的静态方法块在 Java 中使用如下方式定义。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
|
```java:no-line-numbers
|
||||||
|
public class DemoClass {
|
||||||
|
|
||||||
|
static {
|
||||||
|
// 这里是静态方法块的内容
|
||||||
|
}
|
||||||
|
|
||||||
|
public DemoClass() {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
你还可以创建一个 `VariousClass`,并转换为实体类。
|
你还可以创建一个 `VariousClass`,并转换为实体类。
|
||||||
|
|
||||||
`VariousClass` 会枚举所有设置的 `Class` 并最终获得第一个存在的 `Class`。
|
`VariousClass` 会枚举所有设置的 `Class` 并最终获得第一个存在的 `Class`。
|
||||||
@@ -699,15 +727,15 @@ VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").toCla
|
|||||||
## String+VariousClass.toClassOrNull <span class="symbol">- i-ext-method</span>
|
## String+VariousClass.toClassOrNull <span class="symbol">- i-ext-method</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun String.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?): Class<T>?
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
|
||||||
```
|
```
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>?
|
fun VariousClass.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -718,6 +746,8 @@ fun VariousClass.toClassOrNull(loader: ClassLoader?): Class<*>?
|
|||||||
|
|
||||||
新增泛型返回值 `Class<T>` 方法
|
新增泛型返回值 `Class<T>` 方法
|
||||||
|
|
||||||
|
新增 `initialize` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
> 通过字符串类名、`VariousClass` 转换为 `loader` 中的实体类。
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.highcapable.yukihookapi.hook.bean
|
package com.highcapable.yukihookapi.hook.bean
|
||||||
|
|
||||||
import com.highcapable.yukihookapi.hook.factory.toClass
|
import com.highcapable.yukihookapi.hook.factory.toClassOrNull
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 这是一个不确定性 [Class] 类名装载器
|
* 这是一个不确定性 [Class] 类名装载器
|
||||||
@@ -40,17 +40,16 @@ class VariousClass(private vararg val name: String) {
|
|||||||
*
|
*
|
||||||
* - 使用当前 [loader] 装载目标 [Class]
|
* - 使用当前 [loader] 装载目标 [Class]
|
||||||
* @param loader 当前 [ClassLoader] - 若留空使用默认 [ClassLoader]
|
* @param loader 当前 [ClassLoader] - 若留空使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
* @throws IllegalStateException 如果任何 [Class] 都没有匹配到
|
* @throws IllegalStateException 如果任何 [Class] 都没有匹配到
|
||||||
*/
|
*/
|
||||||
fun get(loader: ClassLoader? = null): Class<*> {
|
fun get(loader: ClassLoader? = null, initialize: Boolean = false): Class<*> {
|
||||||
var finalClass: Class<*>? = null
|
var finalClass: Class<*>? = null
|
||||||
if (name.isNotEmpty()) run {
|
if (name.isNotEmpty()) run {
|
||||||
name.forEach {
|
name.forEach {
|
||||||
runCatching {
|
finalClass = it.toClassOrNull(loader, initialize)
|
||||||
finalClass = it.toClass(loader)
|
if (finalClass != null) return@run
|
||||||
return@run
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return finalClass ?: error("VariousClass match failed of those $this")
|
return finalClass ?: error("VariousClass match failed of those $this")
|
||||||
@@ -63,9 +62,10 @@ class VariousClass(private vararg val name: String) {
|
|||||||
*
|
*
|
||||||
* 匹配不到 [Class] 会返回 null - 不会抛出异常
|
* 匹配不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader 当前 [ClassLoader] - 若留空使用默认 [ClassLoader]
|
* @param loader 当前 [ClassLoader] - 若留空使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class] or null
|
* @return [Class] or null
|
||||||
*/
|
*/
|
||||||
fun getOrNull(loader: ClassLoader? = null) = runCatching { get(loader) }.getOrNull()
|
fun getOrNull(loader: ClassLoader? = null, initialize: Boolean = false) = runCatching { get(loader, initialize) }.getOrNull()
|
||||||
|
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
var result = ""
|
var result = ""
|
||||||
|
@@ -95,18 +95,35 @@ internal object ReflectionTool {
|
|||||||
* 使用字符串类名获取 [Class]
|
* 使用字符串类名获取 [Class]
|
||||||
* @param name [Class] 完整名称
|
* @param name [Class] 完整名称
|
||||||
* @param loader [Class] 所在的 [ClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
||||||
*/
|
*/
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal fun findClassByName(name: String, loader: ClassLoader?): Class<*> {
|
internal fun findClassByName(name: String, loader: ClassLoader?, initialize: Boolean = false): Class<*> {
|
||||||
val hashCode = ("[$name][$loader]").hashCode()
|
val hashCode = ("[$name][$loader]").hashCode()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取 [Class.forName] 的 [Class] 对象
|
||||||
|
* @param name [Class] 完整名称
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块
|
||||||
|
* @param loader [Class] 所在的 [ClassLoader] - 默认为 [AppParasitics.baseClassLoader]
|
||||||
|
* @return [Class]
|
||||||
|
*/
|
||||||
|
fun classForName(name: String, initialize: Boolean, loader: ClassLoader? = AppParasitics.baseClassLoader) =
|
||||||
|
Class.forName(name, initialize, loader)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用默认方式和 [ClassLoader] 装载 [Class]
|
||||||
|
* @return [Class] or null
|
||||||
|
*/
|
||||||
|
fun loadWithDefaultClassLoader() = if (initialize.not()) loader?.loadClass(name) else classForName(name, initialize, loader)
|
||||||
return ReflectsCacheStore.findClass(hashCode) ?: runCatching {
|
return ReflectsCacheStore.findClass(hashCode) ?: runCatching {
|
||||||
when {
|
when {
|
||||||
YukiHookBridge.hasXposedBridge -> runCatching { YukiHookHelper.findClass(name, loader) }
|
YukiHookBridge.hasXposedBridge -> runCatching { if (initialize.not()) YukiHookHelper.findClass(name, loader) else null }
|
||||||
.getOrNull() ?: (if (loader == null) Class.forName(name) else loader.loadClass(name))
|
.getOrNull() ?: loadWithDefaultClassLoader() ?: classForName(name, initialize)
|
||||||
loader == null -> Class.forName(name)
|
loader == null -> classForName(name, initialize)
|
||||||
else -> loader.loadClass(name)
|
else -> loadWithDefaultClassLoader()
|
||||||
}.also { ReflectsCacheStore.putClass(hashCode, it) }
|
}.also { ReflectsCacheStore.putClass(hashCode, it) }
|
||||||
}.getOrNull() ?: throw createException(loader ?: AppParasitics.baseClassLoader, name = "Class", "name:[$name]")
|
}.getOrNull() ?: throw createException(loader ?: AppParasitics.baseClassLoader, name = "Class", "name:[$name]")
|
||||||
}
|
}
|
||||||
|
@@ -207,48 +207,55 @@ fun classOf(name: String, loader: ClassLoader? = null) = name.toClass(loader)
|
|||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
||||||
*/
|
*/
|
||||||
fun String.toClass(loader: ClassLoader? = null) = ReflectionTool.findClassByName(name = this, loader)
|
fun String.toClass(loader: ClassLoader? = null, initialize: Boolean = false) = ReflectionTool.findClassByName(name = this, loader, initialize)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]<[T]>
|
* @return [Class]<[T]>
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
||||||
* @throws IllegalStateException 如果 [Class] 的类型不为 [T]
|
* @throws IllegalStateException 如果 [Class] 的类型不为 [T]
|
||||||
*/
|
*/
|
||||||
@JvmName("toClass_Generics")
|
@JvmName("toClass_Generics")
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader? = null) =
|
inline fun <reified T> String.toClass(loader: ClassLoader? = null, initialize: Boolean = false) =
|
||||||
ReflectionTool.findClassByName(name = this, loader) as? Class<T> ?: error("Target Class type cannot cast to ${T::class.java}")
|
ReflectionTool.findClassByName(name = this, loader, initialize) as? Class<T>? ?: error("Target Class type cannot cast to ${T::class.java}")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
*
|
*
|
||||||
* 找不到 [Class] 会返回 null - 不会抛出异常
|
* 找不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class] or null
|
* @return [Class] or null
|
||||||
*/
|
*/
|
||||||
fun String.toClassOrNull(loader: ClassLoader? = null) = runCatching { toClass(loader) }.getOrNull()
|
fun String.toClassOrNull(loader: ClassLoader? = null, initialize: Boolean = false) = runCatching { toClass(loader, initialize) }.getOrNull()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
*
|
*
|
||||||
* 找不到 [Class] 会返回 null - 不会抛出异常
|
* 找不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 不填使用默认 [ClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]<[T]> or null
|
* @return [Class]<[T]> or null
|
||||||
*/
|
*/
|
||||||
@JvmName("toClassOrNull_Generics")
|
@JvmName("toClassOrNull_Generics")
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader? = null) = runCatching { toClass<T>(loader) }.getOrNull()
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader? = null, initialize: Boolean = false) =
|
||||||
|
runCatching { toClass<T>(loader, initialize) }.getOrNull()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过 [T] 得到其 [Class] 实例并转换为实体类
|
* 通过 [T] 得到其 [Class] 实例并转换为实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 可不填
|
* @param loader [Class] 所在的 [ClassLoader] - 默认空 - 可不填
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 如果未设置 [loader] (为 null) 时将不会生效 - 默认否
|
||||||
* @return [Class]<[T]>
|
* @return [Class]<[T]>
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
* @throws NoClassDefFoundError 如果找不到 [Class] 或设置了错误的 [ClassLoader]
|
||||||
*/
|
*/
|
||||||
inline fun <reified T> classOf(loader: ClassLoader? = null) = loader?.let { T::class.java.name.toClass(loader) as Class<T> } ?: T::class.java
|
inline fun <reified T> classOf(loader: ClassLoader? = null, initialize: Boolean = false) =
|
||||||
|
loader?.let { T::class.java.name.toClass(loader, initialize) as Class<T> } ?: T::class.java
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名使用指定的 [ClassLoader] 查找是否存在
|
* 通过字符串类名使用指定的 [ClassLoader] 查找是否存在
|
||||||
|
@@ -476,57 +476,67 @@ open class PackageParam internal constructor(@PublishedApi internal var wrapper:
|
|||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class]
|
* @throws NoClassDefFoundError 如果找不到 [Class]
|
||||||
*/
|
*/
|
||||||
fun String.toClass(loader: ClassLoader? = appClassLoader) = ReflectionTool.findClassByName(name = this, loader)
|
fun String.toClass(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) =
|
||||||
|
ReflectionTool.findClassByName(name = this, loader, initialize)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]<[T]>
|
* @return [Class]<[T]>
|
||||||
* @throws NoClassDefFoundError 如果找不到 [Class]
|
* @throws NoClassDefFoundError 如果找不到 [Class]
|
||||||
* @throws IllegalStateException 如果 [Class] 的类型不为 [T]
|
* @throws IllegalStateException 如果 [Class] 的类型不为 [T]
|
||||||
*/
|
*/
|
||||||
@JvmName("toClass_Generics")
|
@JvmName("toClass_Generics")
|
||||||
inline fun <reified T> String.toClass(loader: ClassLoader? = appClassLoader) =
|
inline fun <reified T> String.toClass(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) =
|
||||||
ReflectionTool.findClassByName(name = this, loader) as? Class<T> ?: error("Target Class type cannot cast to ${T::class.java}")
|
ReflectionTool.findClassByName(name = this, loader, initialize) as? Class<T>?
|
||||||
|
?: error("Target Class type cannot cast to ${T::class.java}")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
*
|
*
|
||||||
* 找不到 [Class] 会返回 null - 不会抛出异常
|
* 找不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class] or null
|
* @return [Class] or null
|
||||||
*/
|
*/
|
||||||
fun String.toClassOrNull(loader: ClassLoader? = appClassLoader) = runCatching { toClass(loader) }.getOrNull()
|
fun String.toClassOrNull(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) =
|
||||||
|
runCatching { toClass(loader, initialize) }.getOrNull()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名转换为 [loader] 中的实体类
|
* 通过字符串类名转换为 [loader] 中的实体类
|
||||||
*
|
*
|
||||||
* 找不到 [Class] 会返回 null - 不会抛出异常
|
* 找不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]<[T]> or null
|
* @return [Class]<[T]> or null
|
||||||
*/
|
*/
|
||||||
@JvmName("toClassOrNull_Generics")
|
@JvmName("toClassOrNull_Generics")
|
||||||
inline fun <reified T> String.toClassOrNull(loader: ClassLoader? = appClassLoader) = runCatching { toClass<T>(loader) }.getOrNull()
|
inline fun <reified T> String.toClassOrNull(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) =
|
||||||
|
runCatching { toClass<T>(loader, initialize) }.getOrNull()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [VariousClass] 转换为 [loader] 中的实体类
|
* [VariousClass] 转换为 [loader] 中的实体类
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class]
|
* @return [Class]
|
||||||
* @throws IllegalStateException 如果任何 [Class] 都没有匹配到
|
* @throws IllegalStateException 如果任何 [Class] 都没有匹配到
|
||||||
*/
|
*/
|
||||||
fun VariousClass.toClass(loader: ClassLoader? = appClassLoader) = get(loader)
|
fun VariousClass.toClass(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) = get(loader, initialize)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [VariousClass] 转换为 [loader] 中的实体类
|
* [VariousClass] 转换为 [loader] 中的实体类
|
||||||
*
|
*
|
||||||
* 匹配不到 [Class] 会返回 null - 不会抛出异常
|
* 匹配不到 [Class] 会返回 null - 不会抛出异常
|
||||||
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
* @param loader [Class] 所在的 [ClassLoader] - 不填使用 [appClassLoader]
|
||||||
|
* @param initialize 是否初始化 [Class] 的静态方法块 - 默认否
|
||||||
* @return [Class] or null
|
* @return [Class] or null
|
||||||
*/
|
*/
|
||||||
fun VariousClass.toClassOrNull(loader: ClassLoader? = appClassLoader) = getOrNull(loader)
|
fun VariousClass.toClassOrNull(loader: ClassLoader? = appClassLoader, initialize: Boolean = false) = getOrNull(loader, initialize)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过字符串类名查找是否存在
|
* 通过字符串类名查找是否存在
|
||||||
|
Reference in New Issue
Block a user