mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
121 lines
78 KiB
JavaScript
121 lines
78 KiB
JavaScript
import{_ as s,o as a,c as o,a as e}from"./app-BpUB8-Q8.js";const n={},l=e(`<div class="custom-container warning"><p class="custom-container-title">Notice</p><p>Due to maintenance costs, the <code>YukiHookAPI</code> will no longer update this document from version <code>1.3.0</code> and switch to the API document automatically generated by the Dokka plugin in version <code>2.0.0</code>.</p></div><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>The English translation of this page has not been completed, you are welcome to contribute translations to us.</p><p>You can use the <strong>Chrome Translation Plugin</strong> to translate entire pages for reference.</p></div><h1 id="reflectionfactory-kt" tabindex="-1"><a class="header-anchor" href="#reflectionfactory-kt" aria-hidden="true">#</a> ReflectionFactory <span class="symbol">- kt</span></h1><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>这是自定义 <code>Member</code> 和 <code>Class</code> 相关功能的查找匹配以及 <code>invoke</code> 的封装类。</p></blockquote><h2 id="memberstype-class" tabindex="-1"><a class="header-anchor" href="#memberstype-class" aria-hidden="true">#</a> MembersType <span class="symbol">- class</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">enum</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">MembersType</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>定义一个 <code>Class</code> 中的 <code>Member</code> 类型</p></blockquote><h3 id="all-enum" tabindex="-1"><a class="header-anchor" href="#all-enum" aria-hidden="true">#</a> ALL <span class="symbol">- enum</span></h3><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">ALL</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>全部 <code>Method</code> 与 <code>Constructor</code>。</p></blockquote><h3 id="method-enum" tabindex="-1"><a class="header-anchor" href="#method-enum" aria-hidden="true">#</a> METHOD <span class="symbol">- enum</span></h3><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">METHOD</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>全部 <code>Method</code>。</p></blockquote><h3 id="constructor-enum" tabindex="-1"><a class="header-anchor" href="#constructor-enum" aria-hidden="true">#</a> CONSTRUCTOR <span class="symbol">- enum</span></h3><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#ADBAC7;">CONSTRUCTOR</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>全部 <code>Constructor</code>。</p></blockquote><h2 id="lazyclass-class" tabindex="-1"><a class="header-anchor" href="#lazyclass-class" aria-hidden="true">#</a> LazyClass <span class="symbol">- class</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">open</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#F47067;">internal</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">constructor</span><span style="color:#ADBAC7;">(</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> instance: </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">,</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">,</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">private</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.2.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>懒装载 <code>Class</code> 实例。</p></blockquote><h2 id="classloader-listofclasses-ext-method" tabindex="-1"><a class="header-anchor" href="#classloader-listofclasses-ext-method" aria-hidden="true">#</a> ClassLoader.listOfClasses <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">listOfClasses</span><span style="color:#ADBAC7;">(): </span><span style="color:#F69D50;">List</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.2</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>写出当前 <code>ClassLoader</code> 下所有 <code>Class</code> 名称数组。</p></blockquote><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>此方法在 <strong>Class</strong> 数量过多时会非常耗时。</p><p>若要按指定规则查找一个 <strong>Class</strong>,请使用 <a href="#classloader-searchclass-ext-method">ClassLoader.searchClass</a> 方法。</p></div><h2 id="classloader-searchclass-ext-method" tabindex="-1"><a class="header-anchor" href="#classloader-searchclass-ext-method" aria-hidden="true">#</a> ClassLoader.searchClass <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">searchClass</span><span style="color:#ADBAC7;">(name: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, async: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, initiate: </span><span style="color:#F69D50;">ClassConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">DexClassFinder</span><span style="color:#ADBAC7;">.Result</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>通过当前 <code>ClassLoader</code> 按指定条件查找并得到 <strong>Dex</strong> 中的 <code>Class</code>。</p></blockquote><div class="custom-container danger"><p class="custom-container-title">Pay Attention</p><p>此方法在 <strong>Class</strong> 数量过多及查找条件复杂时会非常耗时。</p><p>建议启用 <strong>async</strong> 或设置 <strong>name</strong> 参数,<strong>name</strong> 参数将在 Hook APP (宿主) 不同版本中自动进行本地缓存以提升效率。</p><p>此功能尚在实验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。</p></div><h2 id="classloader-onloadclass-ext-method" tabindex="-1"><a class="header-anchor" href="#classloader-onloadclass-ext-method" aria-hidden="true">#</a> ClassLoader.onLoadClass <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">onLoadClass</span><span style="color:#ADBAC7;">(result: (</span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>) -> </span><span style="color:#F69D50;">Unit</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>监听当前 <code>ClassLoader</code> 的 <code>ClassLoader.loadClass</code> 方法装载。</p></blockquote><div class="custom-container danger"><p class="custom-container-title">Pay Attention</p><p>只有当前 <strong>ClassLoader</strong> 有主动使用 <strong>ClassLoader.loadClass</strong> 事件时才能被捕获。</p><p>这是一个实验性功能,一般情况下不会用到此方法,不保证不会发生错误。</p><p>只能在 (Xposed) 宿主环境使用此功能,其它环境下使用将不生效且会打印警告信息。</p></div><p><strong>Function Example</strong></p><p>针对一些使用特定 <code>ClassLoader</code> 装载 <code>Class</code> 的宿主应用,你可以使用此方法来监听 <code>Class</code> 加载情况。</p><div class="custom-container warning"><p class="custom-container-title">Notice</p><p>为了防止发生问题,你需要<u><strong>得到一个存在的 ClassLoader 实例</strong></u>来使用此功能。</p></div><p>比如我们在 <code>PackageParam</code> 中使用 <code>appClassLoader</code>。</p><blockquote><p>The following example</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:#ADBAC7;">appClassLoader.</span><span style="color:#DCBDFB;">onLoadClass</span><span style="color:#ADBAC7;"> { clazz </span><span style="color:#F47067;">-></span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// 得到 clazz 即加载对象</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> clazz</span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 这里进行你需要的操作</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><p>或使用你得到的存在的 <code>ClassLoader</code> 实例,可以通过 Hook 获取。</p><blockquote><p>The following example</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;">val</span><span style="color:#ADBAC7;"> customClassLoader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 假设这个就是你的 ClassLoader</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">customClassLoader?.</span><span style="color:#DCBDFB;">onLoadClass</span><span style="color:#ADBAC7;"> { clazz </span><span style="color:#F47067;">-></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></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><p>在判断到这个 <code>Class</code> 被装载成功时,开始执行你的 Hook 功能。</p><blockquote><p>The following example</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;">val</span><span style="color:#ADBAC7;"> customClassLoader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 假设这个就是你的 ClassLoader</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;">customClassLoader?.</span><span style="color:#DCBDFB;">onLoadClass</span><span style="color:#ADBAC7;"> { clazz </span><span style="color:#F47067;">-></span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">if</span><span style="color:#ADBAC7;">(clazz.name </span><span style="color:#F47067;">==</span><span style="color:#ADBAC7;"> </span><span style="color:#768390;">/** 你需要的 Class 名称 */</span><span style="color:#ADBAC7;">) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> clazz.</span><span style="color:#DCBDFB;">hook</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 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></div><h2 class="deprecated">hookClass - field</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.1.0</code> <code>removed</code></p><p><code>HookClass</code> 相关功能不再对外开放</p><h2 class="deprecated">normalClass - field</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.1.0</code> <code>removed</code></p><p><code>HookClass</code> 相关功能不再对外开放</p><h2 class="deprecated">hasClass - field</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.1.0</code> <code>removed</code></p><p>请直接使用 <code>hasClass()</code> 无参方法</p><h2 id="class-hasextends-ext-field" tabindex="-1"><a class="header-anchor" href="#class-hasextends-ext-field" aria-hidden="true">#</a> Class.hasExtends <span class="symbol">- ext-field</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.hasExtends: </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.80</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>当前 <code>Class</code> 是否有继承关系,父类是 <code>Any</code> 将被认为没有继承关系。</p></blockquote><h2 id="class-extends-ext-method" tabindex="-1"><a class="header-anchor" href="#class-extends-ext-method" aria-hidden="true">#</a> Class?.extends <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">infix</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">?.</span><span style="color:#DCBDFB;">extends</span><span style="color:#ADBAC7;">(other: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.5</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>当前 <code>Class</code> 是否继承于 <code>other</code>。</p></blockquote><p>如果当前 <code>Class</code> 就是 <code>other</code> 也会返回 <code>true</code>。</p><p>如果当前 <code>Class</code> 为 <code>null</code> 或 <code>other</code> 为 <code>null</code> 会返回 <code>false</code>。</p><p><strong>Function Example</strong></p><p>你可以使用此方法来判断两个 <code>Class</code> 是否存在继承关系。</p><blockquote><p>The following example</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:#768390;">// 假设下面这两个 Class 就是你需要判断的 Class</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classA: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classB: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#768390;">// 判断 A 是否继承于 B</span></span>
|
|
<span class="line"><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (classA extends classB) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><h2 id="class-notextends-ext-method" tabindex="-1"><a class="header-anchor" href="#class-notextends-ext-method" aria-hidden="true">#</a> Class?.notExtends <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">infix</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">?.</span><span style="color:#DCBDFB;">notExtends</span><span style="color:#ADBAC7;">(other: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.5</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>当前 <code>Class</code> 是否不继承于 <code>other</code>。</p></blockquote><p>此方法相当于 <code>extends</code> 的反向判断。</p><p><strong>Function Example</strong></p><p>你可以使用此方法来判断两个 <code>Class</code> 是否不存在继承关系。</p><blockquote><p>The following example</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:#768390;">// 假设下面这两个 Class 就是你需要判断的 Class</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classA: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classB: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#768390;">// 判断 A 是否不继承于 B</span></span>
|
|
<span class="line"><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (classA notExtends classB) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><h2 id="class-implements-ext-method" tabindex="-1"><a class="header-anchor" href="#class-implements-ext-method" aria-hidden="true">#</a> Class?.implements <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">infix</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">?.</span><span style="color:#DCBDFB;">implements</span><span style="color:#ADBAC7;">(other: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.5</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>当前 <code>Class</code> 是否实现了 <code>other</code> 接口类。</p></blockquote><p>如果当前 <code>Class</code> 为 <code>null</code> 或 <code>other</code> 为 <code>null</code> 会返回 <code>false</code>。</p><p><strong>Function Example</strong></p><p>你可以使用此方法来判断两个 <code>Class</code> 是否存在依赖关系。</p><blockquote><p>The following example</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:#768390;">// 假设下面这两个 Class 就是你需要判断的 Class</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classA: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classB: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#768390;">// 判断 A 是否实现了 B 接口类</span></span>
|
|
<span class="line"><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (classA implements classB) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><h2 id="class-notimplements-ext-method" tabindex="-1"><a class="header-anchor" href="#class-notimplements-ext-method" aria-hidden="true">#</a> Class?.notImplements <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">infix</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">?.</span><span style="color:#DCBDFB;">notImplements</span><span style="color:#ADBAC7;">(other: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.5</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>当前 <code>Class</code> 是否未实现 <code>other</code> 接口类。</p></blockquote><p>此方法相当于 <code>implements</code> 的反向判断。</p><p><strong>Function Example</strong></p><p>你可以使用此方法来判断两个 <code>Class</code> 是否不存在依赖关系。</p><blockquote><p>The following example</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:#768390;">// 假设下面这两个 Class 就是你需要判断的 Class</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classA: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#F47067;">val</span><span style="color:#ADBAC7;"> classB: </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"><span style="color:#768390;">// 判断 A 是否未实现 B 接口类</span></span>
|
|
<span class="line"><span style="color:#F47067;">if</span><span style="color:#ADBAC7;"> (classA notImplements classB) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><h2 id="class-tojavaprimitivetype-ext-method" tabindex="-1"><a class="header-anchor" href="#class-tojavaprimitivetype-ext-method" aria-hidden="true">#</a> Class.toJavaPrimitiveType <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toJavaPrimitiveType</span><span style="color:#ADBAC7;">(): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.5</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>自动转换当前 <code>Class</code> 为 Java 原始类型 (Primitive Type)。</p></blockquote><p>如果当前 <code>Class</code> 为 Java 或 Kotlin 基本类型将自动执行类型转换。</p><p>当前能够自动转换的基本类型如下。</p><ul><li><code>kotlin.Unit</code></li><li><code>java.lang.Void</code></li><li><code>java.lang.Boolean</code></li><li><code>java.lang.Integer</code></li><li><code>java.lang.Float</code></li><li><code>java.lang.Double</code></li><li><code>java.lang.Long</code></li><li><code>java.lang.Short</code></li><li><code>java.lang.Character</code></li><li><code>java.lang.Byte</code></li></ul><h2 class="deprecated">classOf - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.1.0</code> <code>deprecated</code></p><p>请转到 <code>toClass(...)</code> 方法</p><h2 id="string-toclass-ext-method" tabindex="-1"><a class="header-anchor" href="#string-toclass-ext-method" aria-hidden="true">#</a> String.toClass <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*></span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><code>v1.1.5</code> <code>modified</code></p><p>新增泛型返回值 <code>Class<T></code> 方法</p><p>新增 <code>initialize</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>通过字符串类名转换为 <code>loader</code> 中的实体类。</p></blockquote><p><strong>Function Example</strong></p><p>你可以直接填写你要查找的目标 <code>Class</code>,必须在默认 <code>ClassLoader</code> 下存在。</p><blockquote><p>The following example</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:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><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></div><p>你还可以自定义 <code>Class</code> 所在的 <code>ClassLoader</code>。</p><blockquote><p>The following example</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;">val</span><span style="color:#ADBAC7;"> customClassLoader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 假设这个就是你的 ClassLoader</span></span>
|
|
<span class="line"><span style="color:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">(customClassLoader)</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><blockquote><p>The following example</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:#768390;">// 指定的 DemoClass 必须存在或为可访问的 stub</span></span>
|
|
<span class="line"><span style="color:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">DemoClass</span><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></div><p>你还可以设置在获取到这个 <code>Class</code> 时是否自动执行其默认的静态方法块,默认情况下不会执行。</p><blockquote><p>The following example</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:#768390;">// 获取并执行 DemoClass 默认的静态方法块</span></span>
|
|
<span class="line"><span style="color:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClass</span><span style="color:#ADBAC7;">(initialize </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#6CB6FF;">true</span><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></div><p>默认的静态方法块在 Java 中使用如下方式定义。</p><blockquote><p>The following example</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;">public</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">class</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">DemoClass</span><span style="color:#ADBAC7;"> {</span></span>
|
|
<span class="line"></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">static</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;">public</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">DemoClass</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><h2 id="string-toclassornull-ext-method" tabindex="-1"><a class="header-anchor" href="#string-toclassornull-ext-method" aria-hidden="true">#</a> String.toClassOrNull <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClassOrNull</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><*>?</span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">toClassOrNull</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">>?</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><code>v1.1.5</code> <code>modified</code></p><p>新增泛型返回值 <code>Class<T></code> 方法</p><p>新增 <code>initialize</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>通过字符串类名转换为 <code>loader</code> 中的实体类。</p></blockquote><p>找不到 <code>Class</code> 会返回 <code>null</code>,不会抛出异常。</p><p><strong>Function Example</strong></p><p>用法请参考 <a href="#string-toclass-ext-method">String.toClass</a> 方法。</p><h2 id="classof-method" tabindex="-1"><a class="header-anchor" href="#classof-method" aria-hidden="true">#</a> classOf <span class="symbol">- method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#DCBDFB;">classOf</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Class</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><code>v1.1.5</code> <code>modified</code></p><p>将返回类型由 <code>Class<*></code> cast 为 <code>Class<T></code></p><p>新增 <code>initialize</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>通过 <code>T</code> 得到其 <code>Class</code> 实例并转换为实体类。</p></blockquote><p><strong>Function Example</strong></p><p>我们要获取一个 <code>Class</code> 在 Kotlin 下不通过反射时应该这样做。</p><blockquote><p>The following example</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:#ADBAC7;">DemoClass::</span><span style="color:#DCBDFB;">class</span><span style="color:#ADBAC7;">.java</span></span>
|
|
<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>现在,你可以直接 <code>cast</code> 一个实例并获取它的 <code>Class</code> 对象,必须在当前 <code>ClassLoader</code> 下存在。</p><blockquote><p>The following example</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;">DemoClass</span><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></div><p>若目标存在的 <code>Class</code> 为 <code>stub</code>,通过这种方式,你还可以自定义 <code>Class</code> 所在的 <code>ClassLoader</code>。</p><blockquote><p>The following example</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;">val</span><span style="color:#ADBAC7;"> customClassLoader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 假设这个就是你的 ClassLoader</span></span>
|
|
<span class="line"><span style="color:#DCBDFB;">classOf</span><span style="color:#ADBAC7;"><</span><span style="color:#F69D50;">DemoClass</span><span style="color:#ADBAC7;">>(customClassLoader)</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><h2 id="lazyclass-method" tabindex="-1"><a class="header-anchor" href="#lazyclass-method" aria-hidden="true">#</a> lazyClass <span class="symbol">- method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">lazyClass</span><span style="color:#ADBAC7;">(name: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.NonNull</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">Any</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#DCBDFB;">lazyClass</span><span style="color:#ADBAC7;">(name: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.NonNull</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">T</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">lazyClass</span><span style="color:#ADBAC7;">(variousClass: </span><span style="color:#F69D50;">VariousClass</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.NonNull</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">Any</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.2.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>懒装载 <code>Class</code>。</p></blockquote><h2 id="lazyclassornull-method" tabindex="-1"><a class="header-anchor" href="#lazyclassornull-method" aria-hidden="true">#</a> lazyClassOrNull <span class="symbol">- method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">lazyClassOrNull</span><span style="color:#ADBAC7;">(name: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.Nullable</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">Any</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#DCBDFB;">lazyClassOrNull</span><span style="color:#ADBAC7;">(name: </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.Nullable</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">T</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">lazyClassOrNull</span><span style="color:#ADBAC7;">(variousClass: </span><span style="color:#F69D50;">VariousClass</span><span style="color:#ADBAC7;">, initialize: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, loader: </span><span style="color:#F69D50;">ClassLoaderInitializer</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">LazyClass</span><span style="color:#ADBAC7;">.Nullable</span><span style="color:#F47067;"><</span><span style="color:#ADBAC7;">Any</span><span style="color:#F47067;">></span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.2.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>懒装载 <code>Class</code>。</p></blockquote><h2 id="string-hasclass-ext-method" tabindex="-1"><a class="header-anchor" href="#string-hasclass-ext-method" aria-hidden="true">#</a> String.hasClass <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">String</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasClass</span><span style="color:#ADBAC7;">(loader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">?): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.1.0</code> <code>modified</code></p><p>支持直接使用空参数方法使用默认 <code>ClassLoader</code> 进行判断</p><p><strong>Function Illustrate</strong></p><blockquote><p>通过字符串类名使用指定的 <code>ClassLoader</code> 查找是否存在。</p></blockquote><p><strong>Function Example</strong></p><p>你可以轻松的使用此方法判断字符串中的类是否存在,效果等同于直接使用 <code>Class.forName</code>。</p><blockquote><p>The following example</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;">if</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasClass</span><span style="color:#ADBAC7;">()) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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></div><p>填入方法中的 <code>loader</code> 参数可判断指定的 <code>ClassLoader</code> 中的 <code>Class</code> 是否存在。</p><blockquote><p>The following example</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;">val</span><span style="color:#ADBAC7;"> customClassLoader: </span><span style="color:#F69D50;">ClassLoader</span><span style="color:#ADBAC7;">? </span><span style="color:#F47067;">=</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">..</span><span style="color:#ADBAC7;">. </span><span style="color:#768390;">// 假设这个就是你的 ClassLoader</span></span>
|
|
<span class="line"><span style="color:#F47067;">if</span><span style="color:#ADBAC7;">(</span><span style="color:#96D0FF;">"com.example.demo.DemoClass"</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasClass</span><span style="color:#ADBAC7;">(customClassLoader)) {</span></span>
|
|
<span class="line"><span style="color:#ADBAC7;"> </span><span style="color:#768390;">// Your code here.</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><h2 id="class-hasfield-ext-method" tabindex="-1"><a class="header-anchor" href="#class-hasfield-ext-method" aria-hidden="true">#</a> Class.hasField <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasField</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">FieldConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.4</code> <code>added</code></p><p><code>v1.0.67</code> <code>modified</code></p><p>合并到 <code>FieldFinder</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找变量是否存在。</p></blockquote><h2 id="class-hasmethod-ext-method" tabindex="-1"><a class="header-anchor" href="#class-hasmethod-ext-method" aria-hidden="true">#</a> Class.hasMethod <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasMethod</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">MethodConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>modified</code></p><p>新增 <code>returnType</code> 参数</p><p><code>v1.0.67</code> <code>modified</code></p><p>合并到 <code>MethodFinder</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找方法是否存在。</p></blockquote><h2 id="class-hasconstructor-ext-method" tabindex="-1"><a class="header-anchor" href="#class-hasconstructor-ext-method" aria-hidden="true">#</a> Class.hasConstructor <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasConstructor</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">ConstructorConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.2</code> <code>added</code></p><p><code>v1.0.67</code> <code>modified</code></p><p>合并到 <code>ConstructorFinder</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找构造方法是否存在。</p></blockquote><h2 id="member-hasmodifiers-ext-method" tabindex="-1"><a class="header-anchor" href="#member-hasmodifiers-ext-method" aria-hidden="true">#</a> Member.hasModifiers <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">Member</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasModifiers</span><span style="color:#ADBAC7;">(conditions: </span><span style="color:#F69D50;">ModifierConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.67</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.0</code> <code>modified</code></p><p>合并到 <code>ModifierConditions</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>查找 <code>Member</code> 中匹配的描述符。</p></blockquote><h2 id="class-hasmodifiers-ext-method" tabindex="-1"><a class="header-anchor" href="#class-hasmodifiers-ext-method" aria-hidden="true">#</a> Class.hasModifiers <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">hasModifiers</span><span style="color:#ADBAC7;">(conditions: </span><span style="color:#F69D50;">ModifierConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Boolean</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>查找 <code>Class</code> 中匹配的描述符。</p></blockquote><h2 class="deprecated">obtainStaticFieldAny - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>removed</code></p><h2 class="deprecated">obtainFieldAny - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>removed</code></p><h2 class="deprecated">modifyStaticField - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>removed</code></p><h2 class="deprecated">modifyField - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>removed</code></p><h2 id="class-field-ext-method" tabindex="-1"><a class="header-anchor" href="#class-field-ext-method" aria-hidden="true">#</a> Class.field <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">field</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">FieldConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">FieldFinder</span><span style="color:#ADBAC7;">.Result</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.2</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找并得到变量。</p></blockquote><h2 id="class-method-ext-method" tabindex="-1"><a class="header-anchor" href="#class-method-ext-method" aria-hidden="true">#</a> Class.method <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">method</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">MethodConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">MethodFinder</span><span style="color:#ADBAC7;">.Result</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>modified</code></p><p><s><code>obtainMethod</code></s> 更名为 <code>method</code></p><p>新增 <code>returnType</code> 参数</p><p><code>v1.0.2</code> <code>modified</code></p><p>合并到 <code>MethodFinder</code> 方法体</p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找并得到方法。</p></blockquote><h2 id="class-constructor-ext-method" tabindex="-1"><a class="header-anchor" href="#class-constructor-ext-method" aria-hidden="true">#</a> Class.constructor <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">constructor</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">ConstructorConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">ConstructorFinder</span><span style="color:#ADBAC7;">.Result</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>modified</code></p><p><s><code>obtainConstructor</code></s> 更名为 <code>constructor</code></p><p><code>v1.0.2</code> <code>modified</code></p><p>合并到 <code>ConstructorFinder</code> 方法体</p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><strong>Function Illustrate</strong></p><blockquote><p>查找并得到构造方法。</p></blockquote><h2 class="deprecated">callStatic - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>modified</code></p><p><s><code>invokeStatic</code></s> 更名为 <code>callStatic</code></p><p><code>v1.0.2</code> <code>removed</code></p><h2 class="deprecated">call - method</h2><p><strong>Change Records</strong></p><p><code>v1.0</code> <code>first</code></p><p><code>v1.0.1</code> <code>modified</code></p><p><s><code>invokeAny</code></s> 更名为 <code>call</code></p><p><code>v1.0.2</code> <code>removed</code></p><h2 id="class-generic-ext-method" tabindex="-1"><a class="header-anchor" href="#class-generic-ext-method" aria-hidden="true">#</a> Class.generic <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">generic</span><span style="color:#ADBAC7;">(): </span><span style="color:#F69D50;">GenericClass</span><span style="color:#ADBAC7;">?</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>获得当前 <code>Class</code> 的泛型父类。</p></blockquote><p>如果当前实例不存在泛型将返回 <code>null</code>。</p><h2 id="class-generic-ext-method-1" tabindex="-1"><a class="header-anchor" href="#class-generic-ext-method-1" aria-hidden="true">#</a> Class.generic <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">generic</span><span style="color:#ADBAC7;">(initiate: </span><span style="color:#F69D50;">GenericClass</span><span style="color:#ADBAC7;">.() </span><span style="color:#F47067;">-></span><span style="color:#ADBAC7;"> Unit): </span><span style="color:#F69D50;">GenericClass</span><span style="color:#ADBAC7;">?</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.1.0</code> <code>added</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>获得当前 <code>Class</code> 的泛型父类。</p></blockquote><p>如果当前实例不存在泛型将返回 <code>null</code>。</p><h2 id="any-current-ext-method" tabindex="-1"><a class="header-anchor" href="#any-current-ext-method" aria-hidden="true">#</a> Any.current <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;"> : </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">current</span><span style="color:#ADBAC7;">(ignored: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">CurrentClass</span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">reified</span><span style="color:#ADBAC7;"> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;"> : </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">> </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">current</span><span style="color:#ADBAC7;">(ignored: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, initiate: </span><span style="color:#F69D50;">CurrentClass</span><span style="color:#ADBAC7;">.() </span><span style="color:#F47067;">-></span><span style="color:#ADBAC7;"> Unit): </span><span style="color:#F69D50;">T</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.1.0</code> <code>added</code></p><p>新增 <code>ignored</code> 参数,可以忽略在 <code>CurrentClass</code> 中出现的异常</p><p>新增不使用 <code>current { ... }</code> 调用域直接使用 <code>current()</code> 得到实例的类操作对象</p><p><strong>Function Illustrate</strong></p><blockquote><p>获得当前实例的类操作对象。</p></blockquote><h2 class="deprecated">Class.buildOfAny - ext-method</h2><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.0</code> <code>deprecated</code></p><p>请迁移到 <code>buildOf</code> 方法</p><h2 id="class-buildof-ext-method" tabindex="-1"><a class="header-anchor" href="#class-buildof-ext-method" aria-hidden="true">#</a> Class.buildOf <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">buildOf</span><span style="color:#ADBAC7;">(</span><span style="color:#F47067;">vararg</span><span style="color:#ADBAC7;"> args: </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">?, initiate: </span><span style="color:#F69D50;">ConstructorConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">?</span></span>
|
|
<span class="line"></span></code></pre></div><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> <</span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">buildOf</span><span style="color:#ADBAC7;">(</span><span style="color:#F47067;">vararg</span><span style="color:#ADBAC7;"> args: </span><span style="color:#F69D50;">Any</span><span style="color:#ADBAC7;">?, initiate: </span><span style="color:#F69D50;">ConstructorConditions</span><span style="color:#ADBAC7;">): </span><span style="color:#F69D50;">T</span><span style="color:#ADBAC7;">?</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.0</code> <code>modified</code></p><p>加入无泛型方法 <code>buildOf</code></p><p><code>v1.1.6</code> <code>modified</code></p><p>修改参数命名 <code>param</code> 为 <code>args</code></p><p><strong>Function Illustrate</strong></p><blockquote><p>通过构造方法创建新实例,指定类型 <code>T</code> 或任意类型 <code>Any</code>。</p></blockquote><h2 id="class-allmethods-ext-method" tabindex="-1"><a class="header-anchor" href="#class-allmethods-ext-method" aria-hidden="true">#</a> Class.allMethods <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">allMethods</span><span style="color:#ADBAC7;">(isAccessible: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, result: (</span><span style="color:#F69D50;">index</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Int</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">method</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Method</span><span style="color:#ADBAC7;">) -> </span><span style="color:#F69D50;">Unit</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.5</code> <code>modified</code></p><p>新增 <code>isAccessible</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>遍历当前类中的所有方法。</p></blockquote><h2 id="class-allconstructors-ext-method" tabindex="-1"><a class="header-anchor" href="#class-allconstructors-ext-method" aria-hidden="true">#</a> Class.allConstructors <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">allConstructors</span><span style="color:#ADBAC7;">(isAccessible: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, result: (</span><span style="color:#F69D50;">index</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Int</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">constructor</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Constructor</span><span style="color:#ADBAC7;"><*>) -> </span><span style="color:#F69D50;">Unit</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.5</code> <code>modified</code></p><p>新增 <code>isAccessible</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>遍历当前类中的所有构造方法。</p></blockquote><h2 id="class-allfields-ext-method" tabindex="-1"><a class="header-anchor" href="#class-allfields-ext-method" aria-hidden="true">#</a> Class.allFields <span class="symbol">- ext-method</span></h2><div class="language-kotlin" data-ext="kt"><pre class="shiki github-dark-dimmed" style="background-color:#22272e;" tabindex="0"><code><span class="line"><span style="color:#F47067;">inline</span><span style="color:#ADBAC7;"> </span><span style="color:#F47067;">fun</span><span style="color:#ADBAC7;"> </span><span style="color:#DCBDFB;">Class</span><span style="color:#F47067;"><*></span><span style="color:#ADBAC7;">.</span><span style="color:#DCBDFB;">allFields</span><span style="color:#ADBAC7;">(isAccessible: </span><span style="color:#F69D50;">Boolean</span><span style="color:#ADBAC7;">, result: (</span><span style="color:#F69D50;">index</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Int</span><span style="color:#ADBAC7;">, </span><span style="color:#F69D50;">field</span><span style="color:#ADBAC7;">: </span><span style="color:#F69D50;">Field</span><span style="color:#ADBAC7;">) -> </span><span style="color:#F69D50;">Unit</span><span style="color:#ADBAC7;">)</span></span>
|
|
<span class="line"></span></code></pre></div><p><strong>Change Records</strong></p><p><code>v1.0.70</code> <code>added</code></p><p><code>v1.0.80</code> <code>modified</code></p><p>将方法体进行 inline</p><p><code>v1.1.5</code> <code>modified</code></p><p>新增 <code>isAccessible</code> 参数</p><p><strong>Function Illustrate</strong></p><blockquote><p>遍历当前类中的所有变量。</p></blockquote>`,422),p=[l];function c(t,d){return a(),o("div",null,p)}const i=s(n,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default};
|