mirror of
https://github.com/HighCapable/KavaRef.git
synced 2025-09-07 19:14:11 +08:00
refactor: change T.resolve() to T.asResolver in KavaRef
This commit is contained in:
@@ -31,8 +31,10 @@ public class World {
|
||||
```
|
||||
|
||||
```kotlin
|
||||
World().resolve().firstMethod {
|
||||
val myWorld = World()
|
||||
|
||||
World::class.resolve().firstMethod {
|
||||
name = "sayHello"
|
||||
parameters(String::class)
|
||||
}.invoke("KavaRef")
|
||||
}.of(myWorld).invoke("KavaRef")
|
||||
```
|
@@ -70,7 +70,7 @@ The relationship diagram is as follows.
|
||||
|
||||
``` :no-line-numbers
|
||||
KavaRef
|
||||
└── KClass/Class/Any.resolve()
|
||||
└── KClass/Class.resolve()
|
||||
├── method()
|
||||
├── constructor()
|
||||
└── field()
|
||||
@@ -199,7 +199,7 @@ you can use this instance to create KavaRef reflections directly.
|
||||
```kotlin
|
||||
// Here, the test instance test will be passed to
|
||||
// KavaRef and get test::class.java.
|
||||
test.resolve()
|
||||
test.asResolver()
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
parameters(String::class)
|
||||
@@ -215,7 +215,7 @@ Next, we need to get the `isTaskRunning` variable, which can be written in the f
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
val isTaskRunning = test.resolve()
|
||||
val isTaskRunning = test.asResolver()
|
||||
.firstField {
|
||||
name = "isTaskRunning"
|
||||
type = Boolean::class
|
||||
@@ -258,6 +258,12 @@ To set the current instance, if the reflection is static (static) member, you do
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
|
||||
The `Any.resolve()` function has been deprecated in `1.0.1` version because it pollutes the namespace (for example `File.resolve("/path/to/file")`), and now use `Any.asResolver()` instead.
|
||||
|
||||
:::
|
||||
|
||||
::: danger
|
||||
|
||||
In `MemberResolver` inherited from `InstanceAwareResolver`, the type of `of(instance)` requires the same type as the currently reflected `Class` instance generic type.
|
||||
@@ -295,7 +301,7 @@ At this point, you can use the `parameters(...)` condition to use `VagueType` to
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "release"
|
||||
// Use VagueType to fill in the types you don't want to fill in,
|
||||
@@ -325,7 +331,7 @@ Suppose we want to get the `doTask` method in `Test`, we can use the following i
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
// Use lambda to set the method name.
|
||||
name {
|
||||
@@ -334,7 +340,7 @@ test.resolve()
|
||||
}
|
||||
// Set parameter type.
|
||||
parameters(String::class)
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
### Generic Conditions
|
||||
@@ -349,7 +355,7 @@ Suppose we need to filter the `print` method in `Box<String>`.
|
||||
// Suppose this is an example of this Class.
|
||||
val box: Box<String>
|
||||
// Call and execute with KavaRef.
|
||||
box.resolve()
|
||||
box.asResolver()
|
||||
.firstMethod {
|
||||
name = "print"
|
||||
// Set generic parameter conditions.
|
||||
@@ -374,13 +380,13 @@ Without knowing the superclass name, we only need to add `superclass()` to the f
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "doBaseTask"
|
||||
parameters(String::class)
|
||||
// Just add this condition.
|
||||
superclass()
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
At this time, we can get this method in the superclass.
|
||||
@@ -432,12 +438,12 @@ You can also use string types to pass in full class names in conditions such as
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
// Pass the full class name using string type.
|
||||
parameters("java.lang.String")
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
### Exception Handling
|
||||
@@ -568,12 +574,13 @@ If you don't like the Kotlin lambda writing, you can create chained calls manual
|
||||
// Suppose this is an example of this Class.
|
||||
val test: Test
|
||||
// Call and execute with KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.method() // Conditions begin.
|
||||
.name("doTask")
|
||||
.parameters(String::class)
|
||||
.build() // Conditions ends (executes)
|
||||
.first()
|
||||
.of(test) // Setting up instance.
|
||||
.invoke("task_name")
|
||||
```
|
||||
|
||||
@@ -705,13 +712,13 @@ val myResolver = MyMemberProcessorResolver()
|
||||
// Suppose this is an instance of this Class.
|
||||
val test: Test
|
||||
// Call and execute using KavaRef.
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
// Set custom resolver.
|
||||
.processor(myResolver)
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
parameters(String::class)
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
::: tip
|
||||
|
@@ -31,8 +31,10 @@ public class World {
|
||||
```
|
||||
|
||||
```kotlin
|
||||
World().resolve().firstMethod {
|
||||
val myWorld = World()
|
||||
|
||||
World::class.resolve().firstMethod {
|
||||
name = "sayHello"
|
||||
parameters(String::class)
|
||||
}.invoke("KavaRef")
|
||||
}.of(myWorld).invoke("KavaRef")
|
||||
```
|
@@ -69,7 +69,7 @@ KavaRef 采用链式调用的设计方案,它对可用的 Java 反射 API (例
|
||||
|
||||
``` :no-line-numbers
|
||||
KavaRef
|
||||
└── KClass/Class/Any.resolve()
|
||||
└── KClass/Class.resolve()
|
||||
├── method()
|
||||
├── constructor()
|
||||
└── field()
|
||||
@@ -192,7 +192,7 @@ Test::class
|
||||
|
||||
```kotlin
|
||||
// 在这里,Test 的实例 test 会被传给 KavaRef 并获取 test::class.java
|
||||
test.resolve()
|
||||
test.asResolver()
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
parameters(String::class)
|
||||
@@ -208,7 +208,7 @@ test.resolve()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
val isTaskRunning = test.resolve()
|
||||
val isTaskRunning = test.asResolver()
|
||||
.firstField {
|
||||
name = "isTaskRunning"
|
||||
type = Boolean::class
|
||||
@@ -250,6 +250,12 @@ val test = Test::class.resolve()
|
||||
|
||||
:::
|
||||
|
||||
::: warning
|
||||
|
||||
`Any.resolve()` 方法已在 `1.0.1` 版本被弃用,因为它会污染命名空间 (例如 `File.resolve("/path/to/file")`),现在请使用 `Any.asResolver()` 来代替。
|
||||
|
||||
:::
|
||||
|
||||
::: danger
|
||||
|
||||
在继承于 `InstanceAwareResolver` 的 `MemberResolver` 中,`of(instance)` 的类型要求与当前反射的 `Class` 实例泛型类型相同,
|
||||
@@ -286,7 +292,7 @@ myClass.resolve()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "release"
|
||||
// 使用 VagueType 来填充不想填写的类型,同时保证其它类型能够匹配
|
||||
@@ -314,7 +320,7 @@ test.resolve()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
// 使用 lambda 来设置方法名
|
||||
name {
|
||||
@@ -323,7 +329,7 @@ test.resolve()
|
||||
}
|
||||
// 设置参数类型
|
||||
parameters(String::class)
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
### 泛型条件
|
||||
@@ -338,7 +344,7 @@ KavaRef 支持添加泛型过滤条件,你可以使用 `TypeMatcher` 提供的
|
||||
// 假设这就是这个 Class 的实例
|
||||
val box: Box<String>
|
||||
// 使用 KavaRef 调用并执行
|
||||
box.resolve()
|
||||
box.asResolver()
|
||||
.firstMethod {
|
||||
name = "print"
|
||||
// 设置泛型参数条件
|
||||
@@ -363,13 +369,13 @@ box.resolve()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "doBaseTask"
|
||||
parameters(String::class)
|
||||
// 只需要添加这个条件
|
||||
superclass()
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
这个时候我们就可以在超类中获取到这个方法了。
|
||||
@@ -419,12 +425,12 @@ val tag = Test::class.resolve()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
// 使用字符串类型传入完整类名
|
||||
parameters("java.lang.String")
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
### 异常处理
|
||||
@@ -548,12 +554,13 @@ KavaRef.setLogger(MyLogger())
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
.method() // 条件开始
|
||||
.name("doTask")
|
||||
.parameters(String::class)
|
||||
.build() // 条件结束 (执行)
|
||||
.first()
|
||||
.of(test) // 设置实例
|
||||
.invoke("task_name")
|
||||
```
|
||||
|
||||
@@ -684,13 +691,13 @@ val myResolver = MyMemberProcessorResolver()
|
||||
// 假设这就是这个 Class 的实例
|
||||
val test: Test
|
||||
// 使用 KavaRef 调用并执行
|
||||
test.resolve()
|
||||
Test::class.resolve()
|
||||
// 设置自定义解析器
|
||||
.processor(myResolver)
|
||||
.firstMethod {
|
||||
name = "doTask"
|
||||
parameters(String::class)
|
||||
}.invoke("task_name")
|
||||
}.of(test).invoke("task_name")
|
||||
```
|
||||
|
||||
::: tip
|
||||
|
Reference in New Issue
Block a user