# # Looking for Future

> The future is bright and uncertain, let us look forward to the future development space of `YukiReflection`.

## # Future Plans

> Features that `YukiReflection` may add later are included here.

### # Automatically Generate Reflection Code

Use `stub` to create a `Kotlin` class, and declare the parameters in it, as well as its different states in each version.

For example, the `Java` class below is the target class we need to reflect.

> The following example

    package com.example.test;

    public class MyClass {

        private String myField = "test";

        public MyClass() {
            //...
        }

        private String myMethod1(String var1, int var2) {
            //...
        }

        private void myMethod2() {
            //...
        }

        private void myMethod3(String var1) {
            //...
        }
    }

Through the existing usage of the current API, this class can be called reflectively in the following way.

> The following example

    classOf<MyClass>().buildOf().current {
        // Call myField
        val value = field { name = "myField" }.string()
        // Call myMethod1
        val methodValue = method { name = "myMethod1" }.string("test", 0)
        // Call myMethod2
        method { name = "myMethod2" }.call()
        // Call myMethod3
        method { name = "myMethod3" }.call("test")
    }

The function to be implemented at present can be directly defined as the following `Kotlin` class using the reflection function.

> The following example

    package com.example.test

    @ReflectClass
    class MyClass {

        @ReflectField
        val myField: String = fieldValueOf("none")

        @ReflectMethod
        fun myMethod1(var1: String, var2: Int): String = methodReturnValueOf("none")

        @ReflectMethod
        fun myMethod2() = MethodReturnType.Unit

        @ReflectMethod
        fun myMethod3(var1: String) = MethodReturnType.Unit
    }

Then we can directly call this defined `Kotlin` class to implement the reflection function, and the API will automatically generate the reflection code according to the annotation.

> The following example

    MyClass().also {
        // Call myField
        val value = it.myField
        // Call myMethod1
        val methodValue = it.myMethod1("test", 0)
        // Call myMethod2
        it.myMethod2()
        // Call myMethod3
        it.myMethod3("test")
    }

Tips

The above functions may change after the actual release, and the functions of the actual version shall prevail.