mirror of
https://github.com/HighCapable/YukiReflection.git
synced 2025-09-10 12:34:06 +08:00
Deploy to GitHub pages
This commit is contained in:
101
assets/future.html-qjL5dEhQ.js
Normal file
101
assets/future.html-qjL5dEhQ.js
Normal file
@@ -0,0 +1,101 @@
|
||||
import{_ as s,o as n,c as a,a as l}from"./app-Un_zyw_U.js";const e={},p=l(`<h1 id="展望未来" tabindex="-1"><a class="header-anchor" href="#展望未来" aria-hidden="true">#</a> 展望未来</h1><blockquote><p>未来是美好的,也是不确定的,让我们共同期待 <code>YukiReflection</code> 在未来的发展空间。</p></blockquote><h2 id="未来的计划" tabindex="-1"><a class="header-anchor" href="#未来的计划" aria-hidden="true">#</a> 未来的计划</h2><blockquote><p>这里收录了 <code>YukiReflection</code> 可能会在后期添加的功能。</p></blockquote><h3 id="自动生成反射代码" tabindex="-1"><a class="header-anchor" href="#自动生成反射代码" aria-hidden="true">#</a> 自动生成反射代码</h3><p>使用 <code>stub</code> 的方式创建一个 Kotlin 类,并声明其中的参数,以及其在各个版本中的不同状态。</p><p>比如下面的这个 Java 类就是我们需要反射的目标类。</p><blockquote><p>示例如下</p></blockquote><div class="language-java" data-ext="java"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">package</span><span style="color:#ADBAC7;"> com.example.test;</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F47067;">public</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MyClass</span><span style="color:#ADBAC7;"> {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> String</span><span style="color:#F69D50;"> </span><span style="color:#ADBAC7;">myField</span><span style="color:#F69D50;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">;</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">public</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">MyClass</span><span style="color:#ADBAC7;">() {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> String </span><span style="color:#DCBDFB;">myMethod1</span><span style="color:#ADBAC7;">(String </span><span style="color:#F69D50;">var1</span><span style="color:#ADBAC7;">, </span><span style="color:#F47067;">int</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">var2</span><span style="color:#ADBAC7;">) {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">void</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">myMethod2</span><span style="color:#ADBAC7;">() {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">void</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">myMethod3</span><span style="color:#ADBAC7;">(String </span><span style="color:#F69D50;">var1</span><span style="color:#ADBAC7;">) {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// ...</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> }</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||||
<span class="line"></span></code></pre></div><p>通过目前 API 的现有用法可以使用如下方式反射调用这个类。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">classOf</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">MyClass</span><span style="color:#ADBAC7;">>().</span><span style="color:#DCBDFB;">buildOf</span><span style="color:#ADBAC7;">().</span><span style="color:#DCBDFB;">current</span><span style="color:#ADBAC7;"> {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myField</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">value</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">field</span><span style="color:#ADBAC7;"> { name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"myField"</span><span style="color:#ADBAC7;"> }.</span><span style="color:#DCBDFB;">string</span><span style="color:#ADBAC7;">()</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod1</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> methodValue </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">method</span><span style="color:#ADBAC7;"> { name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"myMethod1"</span><span style="color:#ADBAC7;"> }.</span><span style="color:#DCBDFB;">string</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">0</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod2</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">method</span><span style="color:#ADBAC7;"> { name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"myMethod2"</span><span style="color:#ADBAC7;"> }.</span><span style="color:#DCBDFB;">call</span><span style="color:#ADBAC7;">()</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod3</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">method</span><span style="color:#ADBAC7;"> { name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"myMethod3"</span><span style="color:#ADBAC7;"> }.</span><span style="color:#DCBDFB;">call</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>目前要实现的功能是可以使用反射功能直接定义为如下 Kotlin 类。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">package</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.example.test</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F69D50;">@ReflectClass</span></span>
|
||||
<span class="line"><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MyClass</span><span style="color:#ADBAC7;"> {</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">@ReflectField</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> myField: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">fieldValueOf</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"none"</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">@ReflectMethod</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">myMethod1</span><span style="color:#ADBAC7;">(var1: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, var2: </span><span style="color:#F69D50;">Int</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">methodReturnValueOf</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"none"</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">@ReflectMethod</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">myMethod2</span><span style="color:#ADBAC7;">() </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MethodReturnType.Unit</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">@ReflectMethod</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">myMethod3</span><span style="color:#ADBAC7;">(var1: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">) </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> MethodReturnType.Unit</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>然后我们就可以直接调用这个定义好的 Kotlin 类来实现反射功能,API 会根据注解自动生成反射代码。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">MyClass</span><span style="color:#ADBAC7;">().</span><span style="color:#DCBDFB;">also</span><span style="color:#ADBAC7;"> {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myField</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">value</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> it.myField</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod1</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> methodValue </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> it.</span><span style="color:#DCBDFB;">myMethod1</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">, </span><span style="color:#6CB6FF;">0</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod2</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> it.</span><span style="color:#DCBDFB;">myMethod2</span><span style="color:#ADBAC7;">()</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 调用 myMethod3</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> it.</span><span style="color:#DCBDFB;">myMethod3</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"test"</span><span style="color:#ADBAC7;">)</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>以上功能可能会在实际推出后有所变化,最终以实际版本的功能为准。</p></div><h3 id="自动生成可直接调用的-class-对象" tabindex="-1"><a class="header-anchor" href="#自动生成可直接调用的-class-对象" aria-hidden="true">#</a> 自动生成可直接调用的 Class 对象</h3><p>在 Kotlin 中,表示 Java 的类对象的方式是 <code>YourObject::class.java</code>,这个写法通常会很长,在反射过程中大量使用会很不美观。</p><p>在现有版本中,我们内置了常用的 <code>Class</code> 对象,但是这会增大依赖的体积,而且大多数情况下可能都用不到这些对象。</p><p>例如 <code>StringClass</code>、<code>IntType</code> 等等,这些对象都是在 <code>YukiReflection</code> 中内置的。</p><p>所以我们计划在后期添加一个功能,可以使用 <code>properties</code> 的方式创建一个需要生成的 <code>Class</code> 对象列表,通过 Gradle 插件依次生成这些 <code>Class</code> 对象。</p><p>诸如上面提到的这些原始类型的 <code>Class</code> 对象依然会内置在 <code>YukiReflection</code> 中,其余的 <code>Class</code> 对象需要自行定义。</p><p>生成的名称规范为 <strong>类名 + Class</strong>,为了防止包名冲突,你可以控制生成的 <code>Class</code> 对象的子包名。</p><p>在配置文件中,你无需添加 <code>Class</code> 作为后缀。</p><p>你可以在 Gradle 插件中定义生成的根包名,默认为 <code>com.highcapable.yukireflection.generated.classes</code>。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;"># 最基本的定义方式就是直接写名称</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 将会生成到 com.highcapable.yukireflection.generated.classes.BundleClass</span></span>
|
||||
<span class="line"><span style="color:#F47067;">android.os.Bundle</span><span style="color:#ADBAC7;">=Bundle</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 你可以在前方使用 "." 的形式来定义前置子包名</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 例如我们想把这个类定义到想要的包名</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 将会生成到 com.highcapable.yukireflection.generated.classes.myandroid.myos.BundleClass</span></span>
|
||||
<span class="line"><span style="color:#F47067;">android.os.Bundle</span><span style="color:#ADBAC7;">=myandroid.myos.Bundle</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 你也可以不填写键值内容,这将使用键值名称作为定义的包名和类名</span></span>
|
||||
<span class="line"><span style="color:#768390;"># 将会生成到 com.highcapable.yukireflection.generated.classes.android.os.BundleClass</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">android.os.Bundle</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>上述方式生成的 <code>Class</code> 对象的大概代码形式如下。</p><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">package</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.highcapable.yukireflection.generated.classes.android.os</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在默认 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> BundleClass: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"android.os.Bundle"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">()</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在指定 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">BundleClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"android.os.Bundle"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">(loader)</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>也许这个 <code>Class</code> 可能在一些情况下无法被得到,这个时候你可以参考以下配置方式。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;"># 在键值后添加 "?" 的形式来定义可空的 Class 对象</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">android.os.Bundle?</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>上述方式生成的 <code>Class</code> 对象的大概代码形式如下。</p><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">package</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.highcapable.yukireflection.generated.classes.android.os</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在默认 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> BundleClass: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"android.os.Bundle"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClassOrNull</span><span style="color:#ADBAC7;">()</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在指定 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">BundleClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"android.os.Bundle"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClassOrNull</span><span style="color:#ADBAC7;">(loader)</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果这个 <code>Class</code> 对象能使用直接调用的方式进行引用,这个时候你可以参考以下配置方式。</p><blockquote><p>示例如下</p></blockquote><div class="language-properties line-numbers-mode" data-ext="properties"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#768390;"># 在键值后添加 "!!" 的形式来定义可直接调用的 Class 对象</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">android.os.Bundle!!</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div></div></div><p>上述方式生成的 <code>Class</code> 对象的大概代码形式如下。</p><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">package</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">com.highcapable.yukireflection.generated.classes.android.os</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#F47067;">import</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">android.os.Bundle</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在默认 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> BundleClass: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">Bundle</span><span style="color:#ADBAC7;">> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">classOf</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">Bundle</span><span style="color:#ADBAC7;">>()</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="color:#768390;">// 在指定 ClassLoader 的情况下使用</span></span>
|
||||
<span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">BundleClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">Bundle</span><span style="color:#ADBAC7;">> </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">classOf</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">Bundle</span><span style="color:#ADBAC7;">>(loader)</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>有了生成的 <code>Class</code> 对象,我们就可以愉快地使用 <code>YukiReflection</code> 进行反射了。</p><blockquote><p>示例如下</p></blockquote><div class="language-kotlin line-numbers-mode" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#DCBDFB;">method</span><span style="color:#ADBAC7;"> {</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> name </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#96D0FF;">"onCreate"</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">param</span><span style="color:#ADBAC7;">(BundleClass)</span></span>
|
||||
<span class="line"><span style="color:#ADBAC7;">}</span></span>
|
||||
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><div class="custom-container tip"><p class="custom-container-title">小提示</p><p>以上功能可能会在实际推出后有所变化,最终以实际版本的功能为准。</p></div>`,46),o=[p];function c(t,r){return n(),a("div",null,o)}const d=s(e,[["render",c],["__file","future.html.vue"]]);export{d as default};
|
Reference in New Issue
Block a user