From 3c779850f92d7b1d7afad8198eb03aad68910abb Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sat, 23 Sep 2023 11:48:26 +0800 Subject: [PATCH] docs: remove manually deployed --- docs-source/src/.vuepress/configs/template.ts | 2 +- docs/404.html | 33 - docs/assets/404.html.10d8caae.js | 1 - docs/assets/404.html.c038a05a.js | 1 - docs/assets/BaseFinder.html.69bb751c.js | 1 - docs/assets/BaseFinder.html.8f83f91b.js | 9 - docs/assets/BaseFinder.html.d7748acf.js | 9 - docs/assets/BaseFinder.html.fb47fda7.js | 1 - .../ComponentTypeFactory.html.01fa4f98.js | 1 - .../ComponentTypeFactory.html.86fc30e1.js | 1 - .../ComponentTypeFactory.html.9f6eb483.js | 1 - .../ComponentTypeFactory.html.f94d8b50.js | 1 - .../assets/ConstructorFinder.html.372473c1.js | 1 - .../assets/ConstructorFinder.html.6608ff36.js | 66 -- .../assets/ConstructorFinder.html.91c23734.js | 1 - .../assets/ConstructorFinder.html.a40584a1.js | 66 -- docs/assets/ConstructorRules.html.73382011.js | 9 - docs/assets/ConstructorRules.html.7769fbd0.js | 1 - docs/assets/ConstructorRules.html.e247eb10.js | 9 - docs/assets/ConstructorRules.html.ed54d54f.js | 1 - docs/assets/CountRules.html.69b807a7.js | 1 - docs/assets/CountRules.html.8fc46cf2.js | 6 - docs/assets/CountRules.html.a8c6e084.js | 6 - docs/assets/CountRules.html.aa55eac0.js | 1 - docs/assets/CurrentClass.html.0cbf1174.js | 16 - docs/assets/CurrentClass.html.1f324cf5.js | 1 - docs/assets/CurrentClass.html.205e8299.js | 16 - docs/assets/CurrentClass.html.4fb3c7c5.js | 1 - .../DefinedTypeFactory.html.5311d687.js | 1 - .../DefinedTypeFactory.html.b02e4f3c.js | 1 - .../DefinedTypeFactory.html.db0bb621.js | 2 - .../DefinedTypeFactory.html.e75cea89.js | 2 - docs/assets/DexClassFinder.html.00bc2e4b.js | 46 - docs/assets/DexClassFinder.html.50819339.js | 46 - docs/assets/DexClassFinder.html.7f9c18ee.js | 1 - docs/assets/DexClassFinder.html.e0965adb.js | 1 - docs/assets/FieldFinder.html.00221b25.js | 84 -- docs/assets/FieldFinder.html.44edac16.js | 84 -- docs/assets/FieldFinder.html.71816419.js | 1 - docs/assets/FieldFinder.html.d5dcfef4.js | 1 - docs/assets/FieldRules.html.0a9d082d.js | 1 - docs/assets/FieldRules.html.14cfcb37.js | 7 - docs/assets/FieldRules.html.29bf58de.js | 7 - docs/assets/FieldRules.html.cc84b291.js | 1 - docs/assets/GenericClass.html.18ef844b.js | 1 - docs/assets/GenericClass.html.29e779a0.js | 4 - docs/assets/GenericClass.html.80c441b8.js | 1 - docs/assets/GenericClass.html.937c5c5e.js | 4 - .../GraphicsTypeFactory.html.0a5a863c.js | 1 - .../GraphicsTypeFactory.html.3ab9700c.js | 1 - .../GraphicsTypeFactory.html.c2987428.js | 1 - .../GraphicsTypeFactory.html.d8c3b342.js | 1 - docs/assets/MemberRules.html.2d5c89a4.js | 1 - docs/assets/MemberRules.html.94fb57e3.js | 1 - docs/assets/MemberRules.html.e6dd0524.js | 3 - docs/assets/MemberRules.html.fb90baae.js | 3 - .../assets/MemberRulesResult.html.0030e851.js | 6 - .../assets/MemberRulesResult.html.0df424dd.js | 1 - .../assets/MemberRulesResult.html.230c0739.js | 6 - .../assets/MemberRulesResult.html.aa74ca3c.js | 1 - docs/assets/MethodFinder.html.30643f39.js | 81 -- docs/assets/MethodFinder.html.3e0643fa.js | 1 - docs/assets/MethodFinder.html.704be21f.js | 1 - docs/assets/MethodFinder.html.bae1e13a.js | 81 -- docs/assets/MethodRules.html.46e12f82.js | 1 - docs/assets/MethodRules.html.a2613ed0.js | 13 - docs/assets/MethodRules.html.c94c00ea.js | 1 - docs/assets/MethodRules.html.e854c479.js | 13 - docs/assets/ModifierRules.html.063cc2f9.js | 1 - docs/assets/ModifierRules.html.23e3a69f.js | 14 - docs/assets/ModifierRules.html.b6f683e3.js | 14 - docs/assets/ModifierRules.html.bf55a30e.js | 1 - docs/assets/NameRules.html.2124d233.js | 1 - docs/assets/NameRules.html.538d5551.js | 1 - docs/assets/NameRules.html.5824cbcd.js | 9 - docs/assets/NameRules.html.6db86216.js | 9 - docs/assets/ObjectRules.html.0a6223eb.js | 1 - docs/assets/ObjectRules.html.2373dc72.js | 2 - docs/assets/ObjectRules.html.e6691926.js | 2 - docs/assets/ObjectRules.html.ec943416.js | 1 - .../assets/ReflectionFactory.html.3a708e8c.js | 88 -- .../assets/ReflectionFactory.html.660311db.js | 1 - .../assets/ReflectionFactory.html.79e3b099.js | 1 - .../assets/ReflectionFactory.html.faaec016.js | 88 -- .../VariableTypeFactory.html.216c2fbf.js | 1 - .../VariableTypeFactory.html.2f75d9b7.js | 1 - .../VariableTypeFactory.html.85b2fcf2.js | 1 - .../VariableTypeFactory.html.a02b32e0.js | 1 - docs/assets/VariousClass.html.416446a8.js | 4 - docs/assets/VariousClass.html.66b228e1.js | 4 - docs/assets/VariousClass.html.7a95c6f9.js | 1 - docs/assets/VariousClass.html.be531e78.js | 1 - docs/assets/ViewTypeFactory.html.1609776e.js | 1 - docs/assets/ViewTypeFactory.html.419f7049.js | 1 - docs/assets/ViewTypeFactory.html.4f37f6c4.js | 1 - docs/assets/ViewTypeFactory.html.fd43bb20.js | 1 - docs/assets/YukiReflection.html.071d5ea0.js | 1 - docs/assets/YukiReflection.html.6e790ebd.js | 9 - docs/assets/YukiReflection.html.787cb57f.js | 1 - docs/assets/YukiReflection.html.9b18a061.js | 9 - docs/assets/about.html.2effd4b1.js | 1 - docs/assets/about.html.94009ddf.js | 22 - docs/assets/about.html.b758f732.js | 1 - docs/assets/about.html.c8884850.js | 22 - docs/assets/api-example.html.4692aae4.js | 28 - docs/assets/api-example.html.6daf2d5c.js | 1 - docs/assets/api-example.html.90859470.js | 1 - docs/assets/api-example.html.cc98f2cb.js | 28 - docs/assets/api-exception.html.58702900.js | 1 - docs/assets/api-exception.html.67f8bf5e.js | 86 -- docs/assets/api-exception.html.6f5a5377.js | 1 - docs/assets/api-exception.html.f26818cd.js | 86 -- docs/assets/app.2add9aa5.js | 10 - docs/assets/back-to-top.8efcbe56.svg | 1 - docs/assets/changelog.html.01288623.js | 1 - docs/assets/changelog.html.36e96eae.js | 1 - docs/assets/changelog.html.a0481c52.js | 1 - docs/assets/changelog.html.eb0b25c0.js | 1 - docs/assets/contacts.html.1da5e82b.js | 1 - docs/assets/contacts.html.3310a645.js | 1 - docs/assets/contacts.html.9abe8991.js | 1 - docs/assets/contacts.html.f1c02fdf.js | 1 - docs/assets/features.html.01536ff8.js | 1 - docs/assets/features.html.2e4ae9d9.js | 1 - docs/assets/features.html.65df35ac.js | 771 ----------------- docs/assets/features.html.9a3194da.js | 746 ---------------- docs/assets/future.html.18e105a7.js | 60 -- docs/assets/future.html.47405c37.js | 60 -- docs/assets/future.html.a5999f89.js | 1 - docs/assets/future.html.aa0c285e.js | 1 - docs/assets/home.html.385ffce1.js | 1 - docs/assets/home.html.6d4e805a.js | 1 - docs/assets/home.html.817a2e55.js | 1 - docs/assets/home.html.922e31fa.js | 1 - docs/assets/home.html.9b4cb86d.js | 10 - docs/assets/home.html.9c97a44a.js | 10 - docs/assets/home.html.a2b832f6.js | 1 - docs/assets/home.html.eef2381c.js | 1 - docs/assets/index.html.0336a74d.js | 1 - docs/assets/index.html.1339d5c2.js | 13 - docs/assets/index.html.7c46b7b0.js | 1 - docs/assets/index.html.b541ea38.js | 1 - docs/assets/index.html.e2792c5f.js | 13 - docs/assets/index.html.ed5036c6.js | 1 - docs/assets/quick-start.html.5cdc09d9.js | 1 - docs/assets/quick-start.html.83b3f2af.js | 52 -- docs/assets/quick-start.html.a839f1ea.js | 53 -- docs/assets/quick-start.html.cdfe78bb.js | 1 - docs/assets/search.0782d0d1.svg | 1 - docs/assets/style.7c106af9.css | 1 - docs/en/about/about.html | 54 -- docs/en/about/changelog.html | 33 - docs/en/about/contacts.html | 33 - docs/en/about/future.html | 92 -- docs/en/api/features.html | 803 ------------------ docs/en/api/home.html | 33 - .../yukireflection/YukiReflection.html | 41 - .../yukireflection/bean/CurrentClass.html | 48 -- .../yukireflection/bean/GenericClass.html | 36 - .../yukireflection/bean/VariousClass.html | 36 - .../factory/ReflectionFactory.html | 120 --- .../finder/base/BaseFinder.html | 41 - .../finder/base/rules/CountRules.html | 38 - .../finder/base/rules/ModifierRules.html | 46 - .../finder/base/rules/NameRules.html | 41 - .../finder/base/rules/ObjectRules.html | 34 - .../finder/classes/DexClassFinder.html | 78 -- .../classes/rules/ConstructorRules.html | 41 - .../finder/classes/rules/FieldRules.html | 39 - .../finder/classes/rules/MemberRules.html | 35 - .../finder/classes/rules/MethodRules.html | 45 - .../rules/result/MemberRulesResult.html | 38 - .../finder/members/ConstructorFinder.html | 98 --- .../finder/members/FieldFinder.html | 116 --- .../finder/members/MethodFinder.html | 113 --- .../type/android/ComponentTypeFactory.html | 33 - .../type/android/GraphicsTypeFactory.html | 33 - .../type/android/ViewTypeFactory.html | 33 - .../type/defined/DefinedTypeFactory.html | 34 - .../type/java/VariableTypeFactory.html | 33 - docs/en/config/api-example.html | 60 -- docs/en/config/api-exception.html | 118 --- docs/en/guide/home.html | 42 - docs/en/guide/quick-start.html | 85 -- docs/en/index.html | 45 - docs/images/logo.png | Bin 24862 -> 0 bytes docs/index.html | 33 - docs/zh-cn/about/about.html | 54 -- docs/zh-cn/about/changelog.html | 33 - docs/zh-cn/about/contacts.html | 33 - docs/zh-cn/about/future.html | 92 -- docs/zh-cn/api/features.html | 778 ----------------- docs/zh-cn/api/home.html | 33 - .../yukireflection/YukiReflection.html | 41 - .../yukireflection/bean/CurrentClass.html | 48 -- .../yukireflection/bean/GenericClass.html | 36 - .../yukireflection/bean/VariousClass.html | 36 - .../factory/ReflectionFactory.html | 120 --- .../finder/base/BaseFinder.html | 41 - .../finder/base/rules/CountRules.html | 38 - .../finder/base/rules/ModifierRules.html | 46 - .../finder/base/rules/NameRules.html | 41 - .../finder/base/rules/ObjectRules.html | 34 - .../finder/classes/DexClassFinder.html | 78 -- .../classes/rules/ConstructorRules.html | 41 - .../finder/classes/rules/FieldRules.html | 39 - .../finder/classes/rules/MemberRules.html | 35 - .../finder/classes/rules/MethodRules.html | 45 - .../rules/result/MemberRulesResult.html | 38 - .../finder/members/ConstructorFinder.html | 98 --- .../finder/members/FieldFinder.html | 116 --- .../finder/members/MethodFinder.html | 113 --- .../type/android/ComponentTypeFactory.html | 33 - .../type/android/GraphicsTypeFactory.html | 33 - .../type/android/ViewTypeFactory.html | 33 - .../type/defined/DefinedTypeFactory.html | 34 - .../type/java/VariableTypeFactory.html | 33 - docs/zh-cn/config/api-example.html | 60 -- docs/zh-cn/config/api-exception.html | 118 --- docs/zh-cn/guide/home.html | 42 - docs/zh-cn/guide/quick-start.html | 84 -- docs/zh-cn/index.html | 45 - 222 files changed, 1 insertion(+), 8454 deletions(-) delete mode 100644 docs/404.html delete mode 100644 docs/assets/404.html.10d8caae.js delete mode 100644 docs/assets/404.html.c038a05a.js delete mode 100644 docs/assets/BaseFinder.html.69bb751c.js delete mode 100644 docs/assets/BaseFinder.html.8f83f91b.js delete mode 100644 docs/assets/BaseFinder.html.d7748acf.js delete mode 100644 docs/assets/BaseFinder.html.fb47fda7.js delete mode 100644 docs/assets/ComponentTypeFactory.html.01fa4f98.js delete mode 100644 docs/assets/ComponentTypeFactory.html.86fc30e1.js delete mode 100644 docs/assets/ComponentTypeFactory.html.9f6eb483.js delete mode 100644 docs/assets/ComponentTypeFactory.html.f94d8b50.js delete mode 100644 docs/assets/ConstructorFinder.html.372473c1.js delete mode 100644 docs/assets/ConstructorFinder.html.6608ff36.js delete mode 100644 docs/assets/ConstructorFinder.html.91c23734.js delete mode 100644 docs/assets/ConstructorFinder.html.a40584a1.js delete mode 100644 docs/assets/ConstructorRules.html.73382011.js delete mode 100644 docs/assets/ConstructorRules.html.7769fbd0.js delete mode 100644 docs/assets/ConstructorRules.html.e247eb10.js delete mode 100644 docs/assets/ConstructorRules.html.ed54d54f.js delete mode 100644 docs/assets/CountRules.html.69b807a7.js delete mode 100644 docs/assets/CountRules.html.8fc46cf2.js delete mode 100644 docs/assets/CountRules.html.a8c6e084.js delete mode 100644 docs/assets/CountRules.html.aa55eac0.js delete mode 100644 docs/assets/CurrentClass.html.0cbf1174.js delete mode 100644 docs/assets/CurrentClass.html.1f324cf5.js delete mode 100644 docs/assets/CurrentClass.html.205e8299.js delete mode 100644 docs/assets/CurrentClass.html.4fb3c7c5.js delete mode 100644 docs/assets/DefinedTypeFactory.html.5311d687.js delete mode 100644 docs/assets/DefinedTypeFactory.html.b02e4f3c.js delete mode 100644 docs/assets/DefinedTypeFactory.html.db0bb621.js delete mode 100644 docs/assets/DefinedTypeFactory.html.e75cea89.js delete mode 100644 docs/assets/DexClassFinder.html.00bc2e4b.js delete mode 100644 docs/assets/DexClassFinder.html.50819339.js delete mode 100644 docs/assets/DexClassFinder.html.7f9c18ee.js delete mode 100644 docs/assets/DexClassFinder.html.e0965adb.js delete mode 100644 docs/assets/FieldFinder.html.00221b25.js delete mode 100644 docs/assets/FieldFinder.html.44edac16.js delete mode 100644 docs/assets/FieldFinder.html.71816419.js delete mode 100644 docs/assets/FieldFinder.html.d5dcfef4.js delete mode 100644 docs/assets/FieldRules.html.0a9d082d.js delete mode 100644 docs/assets/FieldRules.html.14cfcb37.js delete mode 100644 docs/assets/FieldRules.html.29bf58de.js delete mode 100644 docs/assets/FieldRules.html.cc84b291.js delete mode 100644 docs/assets/GenericClass.html.18ef844b.js delete mode 100644 docs/assets/GenericClass.html.29e779a0.js delete mode 100644 docs/assets/GenericClass.html.80c441b8.js delete mode 100644 docs/assets/GenericClass.html.937c5c5e.js delete mode 100644 docs/assets/GraphicsTypeFactory.html.0a5a863c.js delete mode 100644 docs/assets/GraphicsTypeFactory.html.3ab9700c.js delete mode 100644 docs/assets/GraphicsTypeFactory.html.c2987428.js delete mode 100644 docs/assets/GraphicsTypeFactory.html.d8c3b342.js delete mode 100644 docs/assets/MemberRules.html.2d5c89a4.js delete mode 100644 docs/assets/MemberRules.html.94fb57e3.js delete mode 100644 docs/assets/MemberRules.html.e6dd0524.js delete mode 100644 docs/assets/MemberRules.html.fb90baae.js delete mode 100644 docs/assets/MemberRulesResult.html.0030e851.js delete mode 100644 docs/assets/MemberRulesResult.html.0df424dd.js delete mode 100644 docs/assets/MemberRulesResult.html.230c0739.js delete mode 100644 docs/assets/MemberRulesResult.html.aa74ca3c.js delete mode 100644 docs/assets/MethodFinder.html.30643f39.js delete mode 100644 docs/assets/MethodFinder.html.3e0643fa.js delete mode 100644 docs/assets/MethodFinder.html.704be21f.js delete mode 100644 docs/assets/MethodFinder.html.bae1e13a.js delete mode 100644 docs/assets/MethodRules.html.46e12f82.js delete mode 100644 docs/assets/MethodRules.html.a2613ed0.js delete mode 100644 docs/assets/MethodRules.html.c94c00ea.js delete mode 100644 docs/assets/MethodRules.html.e854c479.js delete mode 100644 docs/assets/ModifierRules.html.063cc2f9.js delete mode 100644 docs/assets/ModifierRules.html.23e3a69f.js delete mode 100644 docs/assets/ModifierRules.html.b6f683e3.js delete mode 100644 docs/assets/ModifierRules.html.bf55a30e.js delete mode 100644 docs/assets/NameRules.html.2124d233.js delete mode 100644 docs/assets/NameRules.html.538d5551.js delete mode 100644 docs/assets/NameRules.html.5824cbcd.js delete mode 100644 docs/assets/NameRules.html.6db86216.js delete mode 100644 docs/assets/ObjectRules.html.0a6223eb.js delete mode 100644 docs/assets/ObjectRules.html.2373dc72.js delete mode 100644 docs/assets/ObjectRules.html.e6691926.js delete mode 100644 docs/assets/ObjectRules.html.ec943416.js delete mode 100644 docs/assets/ReflectionFactory.html.3a708e8c.js delete mode 100644 docs/assets/ReflectionFactory.html.660311db.js delete mode 100644 docs/assets/ReflectionFactory.html.79e3b099.js delete mode 100644 docs/assets/ReflectionFactory.html.faaec016.js delete mode 100644 docs/assets/VariableTypeFactory.html.216c2fbf.js delete mode 100644 docs/assets/VariableTypeFactory.html.2f75d9b7.js delete mode 100644 docs/assets/VariableTypeFactory.html.85b2fcf2.js delete mode 100644 docs/assets/VariableTypeFactory.html.a02b32e0.js delete mode 100644 docs/assets/VariousClass.html.416446a8.js delete mode 100644 docs/assets/VariousClass.html.66b228e1.js delete mode 100644 docs/assets/VariousClass.html.7a95c6f9.js delete mode 100644 docs/assets/VariousClass.html.be531e78.js delete mode 100644 docs/assets/ViewTypeFactory.html.1609776e.js delete mode 100644 docs/assets/ViewTypeFactory.html.419f7049.js delete mode 100644 docs/assets/ViewTypeFactory.html.4f37f6c4.js delete mode 100644 docs/assets/ViewTypeFactory.html.fd43bb20.js delete mode 100644 docs/assets/YukiReflection.html.071d5ea0.js delete mode 100644 docs/assets/YukiReflection.html.6e790ebd.js delete mode 100644 docs/assets/YukiReflection.html.787cb57f.js delete mode 100644 docs/assets/YukiReflection.html.9b18a061.js delete mode 100644 docs/assets/about.html.2effd4b1.js delete mode 100644 docs/assets/about.html.94009ddf.js delete mode 100644 docs/assets/about.html.b758f732.js delete mode 100644 docs/assets/about.html.c8884850.js delete mode 100644 docs/assets/api-example.html.4692aae4.js delete mode 100644 docs/assets/api-example.html.6daf2d5c.js delete mode 100644 docs/assets/api-example.html.90859470.js delete mode 100644 docs/assets/api-example.html.cc98f2cb.js delete mode 100644 docs/assets/api-exception.html.58702900.js delete mode 100644 docs/assets/api-exception.html.67f8bf5e.js delete mode 100644 docs/assets/api-exception.html.6f5a5377.js delete mode 100644 docs/assets/api-exception.html.f26818cd.js delete mode 100644 docs/assets/app.2add9aa5.js delete mode 100644 docs/assets/back-to-top.8efcbe56.svg delete mode 100644 docs/assets/changelog.html.01288623.js delete mode 100644 docs/assets/changelog.html.36e96eae.js delete mode 100644 docs/assets/changelog.html.a0481c52.js delete mode 100644 docs/assets/changelog.html.eb0b25c0.js delete mode 100644 docs/assets/contacts.html.1da5e82b.js delete mode 100644 docs/assets/contacts.html.3310a645.js delete mode 100644 docs/assets/contacts.html.9abe8991.js delete mode 100644 docs/assets/contacts.html.f1c02fdf.js delete mode 100644 docs/assets/features.html.01536ff8.js delete mode 100644 docs/assets/features.html.2e4ae9d9.js delete mode 100644 docs/assets/features.html.65df35ac.js delete mode 100644 docs/assets/features.html.9a3194da.js delete mode 100644 docs/assets/future.html.18e105a7.js delete mode 100644 docs/assets/future.html.47405c37.js delete mode 100644 docs/assets/future.html.a5999f89.js delete mode 100644 docs/assets/future.html.aa0c285e.js delete mode 100644 docs/assets/home.html.385ffce1.js delete mode 100644 docs/assets/home.html.6d4e805a.js delete mode 100644 docs/assets/home.html.817a2e55.js delete mode 100644 docs/assets/home.html.922e31fa.js delete mode 100644 docs/assets/home.html.9b4cb86d.js delete mode 100644 docs/assets/home.html.9c97a44a.js delete mode 100644 docs/assets/home.html.a2b832f6.js delete mode 100644 docs/assets/home.html.eef2381c.js delete mode 100644 docs/assets/index.html.0336a74d.js delete mode 100644 docs/assets/index.html.1339d5c2.js delete mode 100644 docs/assets/index.html.7c46b7b0.js delete mode 100644 docs/assets/index.html.b541ea38.js delete mode 100644 docs/assets/index.html.e2792c5f.js delete mode 100644 docs/assets/index.html.ed5036c6.js delete mode 100644 docs/assets/quick-start.html.5cdc09d9.js delete mode 100644 docs/assets/quick-start.html.83b3f2af.js delete mode 100644 docs/assets/quick-start.html.a839f1ea.js delete mode 100644 docs/assets/quick-start.html.cdfe78bb.js delete mode 100644 docs/assets/search.0782d0d1.svg delete mode 100644 docs/assets/style.7c106af9.css delete mode 100644 docs/en/about/about.html delete mode 100644 docs/en/about/changelog.html delete mode 100644 docs/en/about/contacts.html delete mode 100644 docs/en/about/future.html delete mode 100644 docs/en/api/features.html delete mode 100644 docs/en/api/home.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/YukiReflection.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html delete mode 100644 docs/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html delete mode 100644 docs/en/config/api-example.html delete mode 100644 docs/en/config/api-exception.html delete mode 100644 docs/en/guide/home.html delete mode 100644 docs/en/guide/quick-start.html delete mode 100644 docs/en/index.html delete mode 100644 docs/images/logo.png delete mode 100644 docs/index.html delete mode 100644 docs/zh-cn/about/about.html delete mode 100644 docs/zh-cn/about/changelog.html delete mode 100644 docs/zh-cn/about/contacts.html delete mode 100644 docs/zh-cn/about/future.html delete mode 100644 docs/zh-cn/api/features.html delete mode 100644 docs/zh-cn/api/home.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html delete mode 100644 docs/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html delete mode 100644 docs/zh-cn/config/api-example.html delete mode 100644 docs/zh-cn/config/api-exception.html delete mode 100644 docs/zh-cn/guide/home.html delete mode 100644 docs/zh-cn/guide/quick-start.html delete mode 100644 docs/zh-cn/index.html diff --git a/docs-source/src/.vuepress/configs/template.ts b/docs-source/src/.vuepress/configs/template.ts index 75b3c0a..a5045bd 100644 --- a/docs-source/src/.vuepress/configs/template.ts +++ b/docs-source/src/.vuepress/configs/template.ts @@ -52,7 +52,7 @@ const navigationLinks = { export const configs = { dev: { - dest: '../docs/', + dest: 'dist', port: 9000 }, website: { diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index 3ff91da..0000000 --- a/docs/404.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - Yuki Reflection - - - - -

404

Looks like we've got some broken links.
Take me home
- - - diff --git a/docs/assets/404.html.10d8caae.js b/docs/assets/404.html.10d8caae.js deleted file mode 100644 index a24a165..0000000 --- a/docs/assets/404.html.10d8caae.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as c,c as t}from"./app.2add9aa5.js";const _={};function o(r,n){return c(),t("div")}const a=e(_,[["render",o],["__file","404.html.vue"]]);export{a as default}; diff --git a/docs/assets/404.html.c038a05a.js b/docs/assets/404.html.c038a05a.js deleted file mode 100644 index 2a1a1ca..0000000 --- a/docs/assets/404.html.c038a05a.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-3706649a","path":"/404.html","title":"","lang":"en-US","frontmatter":{"layout":"NotFound"},"excerpt":"","headers":[],"git":{},"filePathRelative":null}');export{t as data}; diff --git a/docs/assets/BaseFinder.html.69bb751c.js b/docs/assets/BaseFinder.html.69bb751c.js deleted file mode 100644 index 657d22e..0000000 --- a/docs/assets/BaseFinder.html.69bb751c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c945cb6e","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html","title":"BaseFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"BaseFinder.IndexTypeCondition - class","slug":"basefinder-indextypecondition-class","link":"#basefinder-indextypecondition-class","children":[{"level":3,"title":"index - method","slug":"index-method","link":"#index-method","children":[]},{"level":3,"title":"index - method","slug":"index-method-1","link":"#index-method-1","children":[]},{"level":3,"title":"IndexTypeConditionSort - class","slug":"indextypeconditionsort-class","link":"#indextypeconditionsort-class","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md"}');export{e as data}; diff --git a/docs/assets/BaseFinder.html.8f83f91b.js b/docs/assets/BaseFinder.html.8f83f91b.js deleted file mode 100644 index 33166cb..0000000 --- a/docs/assets/BaseFinder.html.8f83f91b.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o as n,c as o,a as e}from"./app.2add9aa5.js";const a={},p=e(`

BaseFinder - class

abstract class BaseFinder
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F Class \u4E0E Member \u67E5\u627E\u7C7B\u529F\u80FD\u7684\u57FA\u672C\u7C7B\u5B9E\u73B0\u3002

BaseFinder.IndexTypeCondition - class

inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5B57\u8282\u7801\u4E0B\u6807\u7B5B\u9009\u5B9E\u73B0\u7C7B\u3002

index - method

fun index(num: Int)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u4E0B\u6807\u3002

\u82E5 index \u5C0F\u4E8E\u96F6\u5219\u4E3A\u5012\u5E8F\uFF0C\u6B64\u65F6\u53EF\u4EE5\u4F7F\u7528 IndexTypeConditionSort.reverse \u65B9\u6CD5\u5B9E\u73B0\u3002

\u53EF\u4F7F\u7528 IndexTypeConditionSort.first \u548C IndexTypeConditionSort.last \u8BBE\u7F6E\u9996\u4F4D\u548C\u672B\u4F4D\u7B5B\u9009\u6761\u4EF6\u3002

index - method

fun index(): IndexTypeConditionSort
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u4E0B\u6807\u3002

IndexTypeConditionSort - class

inner class IndexTypeConditionSort internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5B57\u8282\u7801\u4E0B\u6807\u6392\u5E8F\u5B9E\u73B0\u7C7B\u3002

first - method

fun first()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u6EE1\u8DB3\u6761\u4EF6\u7684\u7B2C\u4E00\u4E2A\u3002

last - method

fun last()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u6EE1\u8DB3\u6761\u4EF6\u7684\u6700\u540E\u4E00\u4E2A\u3002

reverse - method

fun reverse(num: Int)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5012\u5E8F\u4E0B\u6807\u3002

`,50),l=[p];function c(t,r){return n(),o("div",null,l)}const i=s(a,[["render",c],["__file","BaseFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/BaseFinder.html.d7748acf.js b/docs/assets/BaseFinder.html.d7748acf.js deleted file mode 100644 index 44a21ec..0000000 --- a/docs/assets/BaseFinder.html.d7748acf.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o as e,c as n,a as o}from"./app.2add9aa5.js";const a={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

BaseFinder - class

abstract class BaseFinder
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F Class \u4E0E Member \u67E5\u627E\u7C7B\u529F\u80FD\u7684\u57FA\u672C\u7C7B\u5B9E\u73B0\u3002

BaseFinder.IndexTypeCondition - class

inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
-

Change Records

v1.0.0 first

Function Illustrate

\u5B57\u8282\u7801\u4E0B\u6807\u7B5B\u9009\u5B9E\u73B0\u7C7B\u3002

index - method

fun index(num: Int)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u4E0B\u6807\u3002

\u82E5 index \u5C0F\u4E8E\u96F6\u5219\u4E3A\u5012\u5E8F\uFF0C\u6B64\u65F6\u53EF\u4EE5\u4F7F\u7528 IndexTypeConditionSort.reverse \u65B9\u6CD5\u5B9E\u73B0\u3002

\u53EF\u4F7F\u7528 IndexTypeConditionSort.first \u548C IndexTypeConditionSort.last \u8BBE\u7F6E\u9996\u4F4D\u548C\u672B\u4F4D\u7B5B\u9009\u6761\u4EF6\u3002

index - method

fun index(): IndexTypeConditionSort
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u4E0B\u6807\u3002

IndexTypeConditionSort - class

inner class IndexTypeConditionSort internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

\u5B57\u8282\u7801\u4E0B\u6807\u6392\u5E8F\u5B9E\u73B0\u7C7B\u3002

first - method

fun first()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u6EE1\u8DB3\u6761\u4EF6\u7684\u7B2C\u4E00\u4E2A\u3002

last - method

fun last()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u6EE1\u8DB3\u6761\u4EF6\u7684\u6700\u540E\u4E00\u4E2A\u3002

reverse - method

fun reverse(num: Int)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5012\u5E8F\u4E0B\u6807\u3002

`,51),t=[l];function p(c,r){return e(),n("div",null,t)}const i=s(a,[["render",p],["__file","BaseFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/BaseFinder.html.fb47fda7.js b/docs/assets/BaseFinder.html.fb47fda7.js deleted file mode 100644 index 697f03b..0000000 --- a/docs/assets/BaseFinder.html.fb47fda7.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-740d06da","path":"/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html","title":"BaseFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"BaseFinder.IndexTypeCondition - class","slug":"basefinder-indextypecondition-class","link":"#basefinder-indextypecondition-class","children":[{"level":3,"title":"index - method","slug":"index-method","link":"#index-method","children":[]},{"level":3,"title":"index - method","slug":"index-method-1","link":"#index-method-1","children":[]},{"level":3,"title":"IndexTypeConditionSort - class","slug":"indextypeconditionsort-class","link":"#indextypeconditionsort-class","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md"}');export{e as data}; diff --git a/docs/assets/ComponentTypeFactory.html.01fa4f98.js b/docs/assets/ComponentTypeFactory.html.01fa4f98.js deleted file mode 100644 index 9b6d488..0000000 --- a/docs/assets/ComponentTypeFactory.html.01fa4f98.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as n,r as c,o as a,c as r,b as o,d as s,a as p,e}from"./app.2add9aa5.js";const d={},i=p('

ComponentTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),l=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u8FDB\u884C\u67E5\u770B\u3002");function f(y,k){const t=c("ExternalLinkIcon");return a(),r("div",null,[i,o("p",null,[l,o("a",_,[h,s(t)]),m])])}const b=n(d,[["render",f],["__file","ComponentTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/ComponentTypeFactory.html.86fc30e1.js b/docs/assets/ComponentTypeFactory.html.86fc30e1.js deleted file mode 100644 index dd55989..0000000 --- a/docs/assets/ComponentTypeFactory.html.86fc30e1.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-6c58c435","path":"/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html","title":"ComponentTypeFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/ComponentTypeFactory.html.9f6eb483.js b/docs/assets/ComponentTypeFactory.html.9f6eb483.js deleted file mode 100644 index 5c3b038..0000000 --- a/docs/assets/ComponentTypeFactory.html.9f6eb483.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as n,r as a,o as c,c as r,b as o,d as s,a as i,e}from"./app.2add9aa5.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ComponentTypeFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173\u7EC4\u4EF6\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/ComponentTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),m=e(" \u8FDB\u884C\u67E5\u770B\u3002");function u(f,y){const t=a("ExternalLinkIcon");return c(),r("div",null,[l,o("p",null,[d,o("a",h,[_,s(t)]),m])])}const k=n(p,[["render",u],["__file","ComponentTypeFactory.html.vue"]]);export{k as default}; diff --git a/docs/assets/ComponentTypeFactory.html.f94d8b50.js b/docs/assets/ComponentTypeFactory.html.f94d8b50.js deleted file mode 100644 index 6b199ed..0000000 --- a/docs/assets/ComponentTypeFactory.html.f94d8b50.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-7f47f9f8","path":"/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html","title":"ComponentTypeFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/ConstructorFinder.html.372473c1.js b/docs/assets/ConstructorFinder.html.372473c1.js deleted file mode 100644 index 7c9030c..0000000 --- a/docs/assets/ConstructorFinder.html.372473c1.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-722cd474","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md"}');export{e as data}; diff --git a/docs/assets/ConstructorFinder.html.6608ff36.js b/docs/assets/ConstructorFinder.html.6608ff36.js deleted file mode 100644 index beccfb3..0000000 --- a/docs/assets/ConstructorFinder.html.6608ff36.js +++ /dev/null @@ -1,66 +0,0 @@ -import{_ as s,o as n,c as o,a}from"./app.2add9aa5.js";const e={},l=a(`

ConstructorFinder - class

class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Constructor \u6216\u4E00\u7EC4 Constructor\u3002

paramCount - field

var paramCount: Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\uFF0C\u9ED8\u8BA4\u6A21\u7CCA\u67E5\u627E\u5E76\u53D6\u7B2C\u4E00\u4E2A\u5339\u914D\u7684 Constructor\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Constructor \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

param - method

fun param(conditions: ObjectsConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(num: Int): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(numRange: IntRange): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(conditions: CountConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Constructor\u3002

\u6CE8\u610F

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Constructor \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

constructor - method

inline fun constructor(initiate: ConstructorConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Constructor\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Constructor\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Constructor<*>>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Constructor \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, internal val throwable: Throwable?) : BaseResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.result {
-    get().call()
-    all()
-    remedys {}
-    onNoSuchConstructor {}
-}
-

get - method

fun get(): Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u8BF7\u4F7F\u7528 wait \u56DE\u8C03\u7ED3\u679C\u65B9\u6CD5\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u901A\u8FC7\u83B7\u5F97\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u6765\u6267\u884C\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\u5BF9\u8C61\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.get().call()
-

\u4F60\u53EF\u4EE5 cast \u6784\u9020\u65B9\u6CD5\u4E3A\u6307\u5B9A\u7C7B\u578B\u7684\u5B9E\u4F8B\u5BF9\u8C61\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.get().newInstance<TestClass>()
-

\u7279\u522B\u6CE8\u610F

\u82E5\u6784\u9020\u65B9\u6CD5\u542B\u6709\u53C2\u6570\u5219\u540E\u65B9\u53C2\u6570\u5FC5\u586B\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.get().newInstance<TestClass>("param1", "param2")
-

all - method

fun all(): ArrayList<Instance>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u7ED3\u679C\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Constructor\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.all().forEach { instance ->
-    instance.call(...)
-}
-

give - method

fun give(): Constructor<*>?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Constructor \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Constructor<*>>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Constructor \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(initiate: Instance.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(initiate: ArrayList<Instance>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u7ED3\u679C\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA Constructor \u91CD\u67E5\u627E\u529F\u80FD\u3002

\u529F\u80FD\u793A\u4F8B

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Constructor \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchConstructor \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Constructor\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

\u793A\u4F8B\u5982\u4E0B

constructor {
-    // Your code here.
-}.remedys {
-    constructor {
-        // Your code here.
-    }
-    constructor {
-        // Your code here.
-    }
-}
-

onNoSuchConstructor - method

inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Constructor \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u6CE8\u610F

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchConstructor \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val constructor: Constructor<*>?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg args: Any?): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,226),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","ConstructorFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorFinder.html.91c23734.js b/docs/assets/ConstructorFinder.html.91c23734.js deleted file mode 100644 index e1f7c1e..0000000 --- a/docs/assets/ConstructorFinder.html.91c23734.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-b3220076","path":"/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html","title":"ConstructorFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchConstructor - method","slug":"onnosuchconstructor-method","link":"#onnosuchconstructor-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md"}');export{e as data}; diff --git a/docs/assets/ConstructorFinder.html.a40584a1.js b/docs/assets/ConstructorFinder.html.a40584a1.js deleted file mode 100644 index 38319b1..0000000 --- a/docs/assets/ConstructorFinder.html.a40584a1.js +++ /dev/null @@ -1,66 +0,0 @@ -import{_ as s,o as n,c as o,a}from"./app.2add9aa5.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorFinder - class

class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
-

Change Records

v1.0.0 first

Function Illustrate

Constructor \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Constructor \u6216\u4E00\u7EC4 Constructor\u3002

paramCount - field

var paramCount: Int
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\uFF0C\u9ED8\u8BA4\u6A21\u7CCA\u67E5\u627E\u5E76\u53D6\u7B2C\u4E00\u4E2A\u5339\u914D\u7684 Constructor\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Constructor \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

Pay Attention

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

param - method

fun param(conditions: ObjectsConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u6761\u4EF6\u3002

Pay Attention

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(num: Int): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(numRange: IntRange): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(conditions: CountConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Constructor\u3002

Notice

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

Constructor \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

constructor - method

inline fun constructor(initiate: ConstructorConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Constructor\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Constructor\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Constructor<*>>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

Function Example

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Constructor \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

The following example

constructor {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, internal val throwable: Throwable?) : BaseResult
-

Change Records

v1.0.0 first

Function Illustrate

Constructor \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

The following example

constructor {
-    // Your code here.
-}.result {
-    get().call()
-    all()
-    remedys {}
-    onNoSuchConstructor {}
-}
-

get - method

fun get(): Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u8BF7\u4F7F\u7528 wait \u56DE\u8C03\u7ED3\u679C\u65B9\u6CD5\u3002

Function Example

\u4F60\u53EF\u4EE5\u901A\u8FC7\u83B7\u5F97\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u6765\u6267\u884C\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u7684\u5B9E\u4F8B\u5BF9\u8C61\u3002

The following example

constructor {
-    // Your code here.
-}.get().call()
-

\u4F60\u53EF\u4EE5 cast \u6784\u9020\u65B9\u6CD5\u4E3A\u6307\u5B9A\u7C7B\u578B\u7684\u5B9E\u4F8B\u5BF9\u8C61\u3002

The following example

constructor {
-    // Your code here.
-}.get().newInstance<TestClass>()
-

Pay Attention

\u82E5\u6784\u9020\u65B9\u6CD5\u542B\u6709\u53C2\u6570\u5219\u540E\u65B9\u53C2\u6570\u5FC5\u586B\u3002

The following example

constructor {
-    // Your code here.
-}.get().newInstance<TestClass>("param1", "param2")
-

all - method

fun all(): ArrayList<Instance>
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u7ED3\u679C\u3002

Function Example

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Constructor\u3002

The following example

constructor {
-    // Your code here.
-}.all().forEach { instance ->
-    instance.call(...)
-}
-

give - method

fun give(): Constructor<*>?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Constructor \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Constructor<*>>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Constructor \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(initiate: Instance.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Constructor \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(initiate: ArrayList<Instance>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Constructor \u5B9E\u4F8B\u7ED3\u679C\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA Constructor \u91CD\u67E5\u627E\u529F\u80FD\u3002

Function Example

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Constructor \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchConstructor \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Constructor\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

The following example

constructor {
-    // Your code here.
-}.remedys {
-    constructor {
-        // Your code here.
-    }
-    constructor {
-        // Your code here.
-    }
-}
-

onNoSuchConstructor - method

inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Constructor \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

Notice

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchConstructor \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val constructor: Constructor<*>?)
-

Change Records

v1.0.0 first

Function Illustrate

Constructor \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B\uFF0C\u4E0D\u6307\u5B9A\u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

newInstance - method

fun <T> newInstance(vararg args: Any?): T?
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Constructor \u521B\u5EFA\u76EE\u6807\u5B9E\u4F8B \uFF0C\u6307\u5B9A T \u76EE\u6807\u5B9E\u4F8B\u7C7B\u578B\u3002

`,227),p=[l];function t(c,r){return n(),o("div",null,p)}const i=s(e,[["render",t],["__file","ConstructorFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorRules.html.73382011.js b/docs/assets/ConstructorRules.html.73382011.js deleted file mode 100644 index b1b7ee9..0000000 --- a/docs/assets/ConstructorRules.html.73382011.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o,c as a,a as n}from"./app.2add9aa5.js";const e={},p=n(`

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Constructor \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

paramCount - field

var paramCount: Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Constructor \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

param - method

fun param(conditions: ObjectsConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

paramCount - method

fun paramCount(numRange: IntRange)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

paramCount - method

fun paramCount(conditions: CountConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

`,57),t=[p];function c(r,l){return o(),a("div",null,t)}const i=s(e,[["render",c],["__file","ConstructorRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorRules.html.7769fbd0.js b/docs/assets/ConstructorRules.html.7769fbd0.js deleted file mode 100644 index 65a2f64..0000000 --- a/docs/assets/ConstructorRules.html.7769fbd0.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-cce2b7b6","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html","title":"ConstructorRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md"}');export{e as data}; diff --git a/docs/assets/ConstructorRules.html.e247eb10.js b/docs/assets/ConstructorRules.html.e247eb10.js deleted file mode 100644 index aa157b8..0000000 --- a/docs/assets/ConstructorRules.html.e247eb10.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o,c as a,a as n}from"./app.2add9aa5.js";const e={},t=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ConstructorRules - class

class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
-

Change Records

v1.0.0 first

Function Illustrate

Constructor \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

paramCount - field

var paramCount: Int
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Constructor \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

Pay Attention

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

param - method

fun param(conditions: ObjectsConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u6761\u4EF6\u3002

Pay Attention

\u65E0\u53C2 Constructor \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Constructor \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

paramCount - method

fun paramCount(numRange: IntRange)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

paramCount - method

fun paramCount(conditions: CountConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Constructor \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

`,58),p=[t];function r(c,l){return o(),a("div",null,p)}const i=s(e,[["render",r],["__file","ConstructorRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/ConstructorRules.html.ed54d54f.js b/docs/assets/ConstructorRules.html.ed54d54f.js deleted file mode 100644 index 23331dc..0000000 --- a/docs/assets/ConstructorRules.html.ed54d54f.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-ec153654","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html","title":"ConstructorRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md"}');export{e as data}; diff --git a/docs/assets/CountRules.html.69b807a7.js b/docs/assets/CountRules.html.69b807a7.js deleted file mode 100644 index 72e5697..0000000 --- a/docs/assets/CountRules.html.69b807a7.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3dbf4880","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html","title":"CountRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"Int.isZero - i-ext-method","slug":"int-iszero-i-ext-method","link":"#int-iszero-i-ext-method","children":[]},{"level":2,"title":"Int.moreThan - i-ext-method","slug":"int-morethan-i-ext-method","link":"#int-morethan-i-ext-method","children":[]},{"level":2,"title":"Int.lessThan - i-ext-method","slug":"int-lessthan-i-ext-method","link":"#int-lessthan-i-ext-method","children":[]},{"level":2,"title":"Int.inInterval - i-ext-method","slug":"int-ininterval-i-ext-method","link":"#int-ininterval-i-ext-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md"}');export{e as data}; diff --git a/docs/assets/CountRules.html.8fc46cf2.js b/docs/assets/CountRules.html.8fc46cf2.js deleted file mode 100644 index 3fc80a3..0000000 --- a/docs/assets/CountRules.html.8fc46cf2.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as s,o as n,c as o,a as e}from"./app.2add9aa5.js";const a={},t=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CountRules - class

class CountRules private constructor()
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u6570\u7EC4 (\u4E0B\u6807) \u4E2A\u6570\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5C0F\u4E8E count\u3002

Int.inInterval - i-ext-method

fun Int.inInterval(countRange: IntRange): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5728 countRange \u533A\u95F4 A \u2264 this \u2264 B\u3002

`,32),l=[t];function c(p,r){return n(),o("div",null,l)}const d=s(a,[["render",c],["__file","CountRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/CountRules.html.a8c6e084.js b/docs/assets/CountRules.html.a8c6e084.js deleted file mode 100644 index 12d9fb1..0000000 --- a/docs/assets/CountRules.html.a8c6e084.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as s,o,c as n,a as e}from"./app.2add9aa5.js";const a={},l=e(`

CountRules - class

class CountRules private constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u6570\u7EC4 (\u4E0B\u6807) \u4E2A\u6570\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

Int.isZero - i-ext-method

fun Int.isZero(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u4E3A 0\u3002

Int.moreThan - i-ext-method

fun Int.moreThan(count: Int): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5927\u4E8E count\u3002

Int.lessThan - i-ext-method

fun Int.lessThan(count: Int): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5C0F\u4E8E count\u3002

Int.inInterval - i-ext-method

fun Int.inInterval(countRange: IntRange): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5728 countRange \u533A\u95F4 A \u2264 this \u2264 B\u3002

`,31),t=[l];function p(c,r){return o(),n("div",null,t)}const i=s(a,[["render",p],["__file","CountRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/CountRules.html.aa55eac0.js b/docs/assets/CountRules.html.aa55eac0.js deleted file mode 100644 index ba0837a..0000000 --- a/docs/assets/CountRules.html.aa55eac0.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-6f96d791","path":"/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html","title":"CountRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"Int.isZero - i-ext-method","slug":"int-iszero-i-ext-method","link":"#int-iszero-i-ext-method","children":[]},{"level":2,"title":"Int.moreThan - i-ext-method","slug":"int-morethan-i-ext-method","link":"#int-morethan-i-ext-method","children":[]},{"level":2,"title":"Int.lessThan - i-ext-method","slug":"int-lessthan-i-ext-method","link":"#int-lessthan-i-ext-method","children":[]},{"level":2,"title":"Int.inInterval - i-ext-method","slug":"int-ininterval-i-ext-method","link":"#int-ininterval-i-ext-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md"}');export{e as data}; diff --git a/docs/assets/CurrentClass.html.0cbf1174.js b/docs/assets/CurrentClass.html.0cbf1174.js deleted file mode 100644 index 234201b..0000000 --- a/docs/assets/CurrentClass.html.0cbf1174.js +++ /dev/null @@ -1,16 +0,0 @@ -import{_ as s,o as n,c as a,a as e}from"./app.2add9aa5.js";const o={},l=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getName\u3002

simpleName - field

val simpleName: String
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

generic - method

inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

superClass - method

fun superClass(): SuperClass
-

Change Records

v1.0.0 first

Function Illustrate

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u3002

field - method

inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u8C03\u7528\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u53D8\u91CF\u3002

method - method

inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u8C03\u7528\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u65B9\u6CD5\u3002

SuperClass - class

inner class SuperClass internal constructor(internal val superClassSet: Class<*>)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D\u7C7B\u7684\u7236\u7C7B\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u4E2D\u7236\u7C7B\u7684 Class.getName\u3002

simpleName - field

val simpleName: String
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D classSet \u4E2D\u7236\u7C7B\u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7236\u7C7B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

generic - method

inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7236\u7C7B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

field - method

inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u4E2D\u7684\u53D8\u91CF\u3002

method - method

inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u4E2D\u7684\u65B9\u6CD5\u3002

`,95),p=[l];function c(t,r){return n(),a("div",null,p)}const i=s(o,[["render",c],["__file","CurrentClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/CurrentClass.html.1f324cf5.js b/docs/assets/CurrentClass.html.1f324cf5.js deleted file mode 100644 index 5ab1c9e..0000000 --- a/docs/assets/CurrentClass.html.1f324cf5.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-406687ff","path":"/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html","title":"CurrentClass - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"simpleName - field","slug":"simplename-field","link":"#simplename-field","children":[]},{"level":2,"title":"generic - method","slug":"generic-method","link":"#generic-method","children":[]},{"level":2,"title":"generic - method","slug":"generic-method-1","link":"#generic-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":2,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":2,"title":"SuperClass - class","slug":"superclass-class","link":"#superclass-class","children":[{"level":3,"title":"name - field","slug":"name-field-1","link":"#name-field-1","children":[]},{"level":3,"title":"simpleName - field","slug":"simplename-field-1","link":"#simplename-field-1","children":[]},{"level":3,"title":"generic - method","slug":"generic-method-2","link":"#generic-method-2","children":[]},{"level":3,"title":"generic - method","slug":"generic-method-3","link":"#generic-method-3","children":[]},{"level":3,"title":"field - method","slug":"field-method-1","link":"#field-method-1","children":[]},{"level":3,"title":"method - method","slug":"method-method-1","link":"#method-method-1","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.md"}');export{e as data}; diff --git a/docs/assets/CurrentClass.html.205e8299.js b/docs/assets/CurrentClass.html.205e8299.js deleted file mode 100644 index 8536f0e..0000000 --- a/docs/assets/CurrentClass.html.205e8299.js +++ /dev/null @@ -1,16 +0,0 @@ -import{_ as s,o as a,c as n,a as o}from"./app.2add9aa5.js";const e={},l=o(`

CurrentClass - class

class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getName\u3002

simpleName - field

val simpleName: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

generic - method

inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

superClass - method

fun superClass(): SuperClass
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u3002

field - method

inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8C03\u7528\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u53D8\u91CF\u3002

method - method

inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8C03\u7528\u5F53\u524D\u5B9E\u4F8B\u4E2D\u7684\u65B9\u6CD5\u3002

SuperClass - class

inner class SuperClass internal constructor(internal val superClassSet: Class<*>)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D\u7C7B\u7684\u7236\u7C7B\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

name - field

val name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u4E2D\u7236\u7C7B\u7684 Class.getName\u3002

simpleName - field

val simpleName: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D classSet \u4E2D\u7236\u7C7B\u7684 Class.getSimpleName\u3002

generic - method

fun generic(): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7236\u7C7B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

generic - method

inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7236\u7C7B\u4E2D\u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

field - method

inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u4E2D\u7684\u53D8\u91CF\u3002

method - method

inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8C03\u7528\u7236\u7C7B\u5B9E\u4F8B\u4E2D\u7684\u65B9\u6CD5\u3002

`,94),p=[l];function c(t,r){return a(),n("div",null,p)}const i=s(e,[["render",c],["__file","CurrentClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/CurrentClass.html.4fb3c7c5.js b/docs/assets/CurrentClass.html.4fb3c7c5.js deleted file mode 100644 index baaef54..0000000 --- a/docs/assets/CurrentClass.html.4fb3c7c5.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-47f17664","path":"/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html","title":"CurrentClass - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"simpleName - field","slug":"simplename-field","link":"#simplename-field","children":[]},{"level":2,"title":"generic - method","slug":"generic-method","link":"#generic-method","children":[]},{"level":2,"title":"generic - method","slug":"generic-method-1","link":"#generic-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":2,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":2,"title":"SuperClass - class","slug":"superclass-class","link":"#superclass-class","children":[{"level":3,"title":"name - field","slug":"name-field-1","link":"#name-field-1","children":[]},{"level":3,"title":"simpleName - field","slug":"simplename-field-1","link":"#simplename-field-1","children":[]},{"level":3,"title":"generic - method","slug":"generic-method-2","link":"#generic-method-2","children":[]},{"level":3,"title":"generic - method","slug":"generic-method-3","link":"#generic-method-3","children":[]},{"level":3,"title":"field - method","slug":"field-method-1","link":"#field-method-1","children":[]},{"level":3,"title":"method - method","slug":"method-method-1","link":"#method-method-1","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/bean/CurrentClass.md"}');export{e as data}; diff --git a/docs/assets/DefinedTypeFactory.html.5311d687.js b/docs/assets/DefinedTypeFactory.html.5311d687.js deleted file mode 100644 index f3eccc8..0000000 --- a/docs/assets/DefinedTypeFactory.html.5311d687.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-597ac69b","path":"/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html","title":"DefinedTypeFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"VagueType - field","slug":"vaguetype-field","link":"#vaguetype-field","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/DefinedTypeFactory.html.b02e4f3c.js b/docs/assets/DefinedTypeFactory.html.b02e4f3c.js deleted file mode 100644 index 9e1ce42..0000000 --- a/docs/assets/DefinedTypeFactory.html.b02e4f3c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-30e525ac","path":"/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html","title":"DefinedTypeFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"VagueType - field","slug":"vaguetype-field","link":"#vaguetype-field","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/DefinedTypeFactory.html.db0bb621.js b/docs/assets/DefinedTypeFactory.html.db0bb621.js deleted file mode 100644 index 55ed8ab..0000000 --- a/docs/assets/DefinedTypeFactory.html.db0bb621.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as e,o as s,c as o,a as t}from"./app.2add9aa5.js";const a={},n=t(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DefinedTypeFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u6A21\u7CCA\u7C7B\u578B\u3002

`,12),c=[n];function r(l,p){return s(),o("div",null,c)}const d=e(a,[["render",r],["__file","DefinedTypeFactory.html.vue"]]);export{d as default}; diff --git a/docs/assets/DefinedTypeFactory.html.e75cea89.js b/docs/assets/DefinedTypeFactory.html.e75cea89.js deleted file mode 100644 index b879834..0000000 --- a/docs/assets/DefinedTypeFactory.html.e75cea89.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as e,o as s,c as a,a as o}from"./app.2add9aa5.js";const t={},n=o(`

DefinedTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u5185\u90E8\u7C7B\u578B\u7684\u5B9A\u4E49\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u7528\u4E8E\u53CD\u5C04 API \u76F8\u5173\u7528\u6CD5\u7684\u5EF6\u4F38\u3002

VagueType - field

val VagueType: Class<*>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u6A21\u7CCA\u7C7B\u578B\u3002

`,11),c=[n];function p(l,r){return s(),a("div",null,c)}const i=e(t,[["render",p],["__file","DefinedTypeFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/DexClassFinder.html.00bc2e4b.js b/docs/assets/DexClassFinder.html.00bc2e4b.js deleted file mode 100644 index 183d531..0000000 --- a/docs/assets/DexClassFinder.html.00bc2e4b.js +++ /dev/null @@ -1,46 +0,0 @@ -import{_ as s,o,c as e,a}from"./app.2add9aa5.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

DexClassFinder - class

class DexClassFinder internal constructor(
-    private val context: Context?,
-    internal var name: String,
-    internal var async: Boolean,
-    override val loaderSet: ClassLoader?
-) : ClassBaseFinder
-

Change Records

v1.0.0 first

Function Illustrate

Class \u67E5\u627E\u7C7B\u3002

\u53EF\u4F7F\u7528 BaseDexClassLoader \u901A\u8FC7\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u6307\u5B9A Class \u6216\u4E00\u7EC4 Class\u3002

Notice

\u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

companion object - object

Change Records

v1.0.0 first

clearCache - method

fun clearCache(context: Context, versionName: String?, versionCode: Long?)
-

Change Records

v1.0.0 first

Function Illustrate

\u6E05\u9664\u5F53\u524D DexClassFinder \u7684 Class \u7F13\u5B58\u3002

\u9002\u7528\u4E8E\u5168\u90E8\u901A\u8FC7 ClassLoader.searchClass \u83B7\u53D6\u7684 DexClassFinder\u3002

fullName - field

var fullName: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

\u4F8B\u5982 com.demo.Test \u9700\u8981\u586B\u5199 com.demo.Test\u3002

simpleName - field

var simpleName: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u4F1A\u4E3A\u7A7A\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u4F7F\u7528 singleName\u3002

singleName - field

var singleName: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u53EA\u9700\u8981\u586B\u5199 Test$InnerTest\u3002

from - method

fun from(vararg name: String): FromPackageRules
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5728\u6307\u5B9A\u5305\u540D\u8303\u56F4\u67E5\u627E\u5F53\u524D Class\u3002

\u8BBE\u7F6E\u540E\u4EC5\u4F1A\u5728\u5F53\u524D name \u5F00\u5934\u5339\u914D\u7684\u5305\u540D\u8DEF\u5F84\u4E0B\u8FDB\u884C\u67E5\u627E\uFF0C\u53EF\u63D0\u5347\u67E5\u627E\u901F\u5EA6\u3002

\u4F8B\u5982 \u2193

com.demo.test

com.demo.test.demo

Notice

\u5EFA\u8BAE\u8BBE\u7F6E\u6B64\u53C2\u6570\u6307\u5B9A\u67E5\u627E\u8303\u56F4\uFF0C\u5426\u5219 Class \u8FC7\u591A\u65F6\u5C06\u4F1A\u975E\u5E38\u6162\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

fullName - method

fun fullName(value: String): ClassNameRules
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

\u4F8B\u5982 com.demo.Test \u9700\u8981\u586B\u5199 com.demo.Test\u3002

simpleName - method

fun simpleName(value: String): ClassNameRules
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u4F1A\u4E3A\u7A7A\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u4F7F\u7528 singleName\u3002

singleName - method

fun singleName(value: String): ClassNameRules
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u53EA\u9700\u8981\u586B\u5199 Test$InnerTest\u3002

fullName - method

fun fullName(conditions: NameConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u6761\u4EF6\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

simpleName - method

fun simpleName(conditions: NameConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u6761\u4EF6\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

singleName - method

fun singleName(conditions: NameConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u6761\u4EF6\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

extends - method

inline fun <reified T> extends()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u7EE7\u627F\u7684\u7236\u7C7B\u3002

extends - method

fun extends(vararg name: String)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u7EE7\u627F\u7684\u7236\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684\u7236\u7C7B\u3002

implements - method

inline fun <reified T> implements()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u5B9E\u73B0\u7684\u63A5\u53E3\u7C7B\u3002

implements - method

fun implements(vararg name: String)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u5B9E\u73B0\u7684\u63A5\u53E3\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684\u63A5\u53E3\u7C7B\u3002

anonymous - method

fun anonymous()
-

Change Records

v1.0.0 first

Function Illustrate

\u6807\u8BC6 Class \u4E3A\u533F\u540D\u7C7B\u3002

\u4F8B\u5982 com.demo.Test$1 \u6216 com.demo.Test$InnerTest\u3002

\u6807\u8BC6\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528 enclosing \u6765\u8FDB\u4E00\u6B65\u6307\u5B9A\u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

noExtends - method

fun noExtends()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u7EE7\u627F\u3002

\u6B64\u65F6 Class \u53EA\u5E94\u8BE5\u7EE7\u627F\u4E8E Any\u3002

Notice

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E extends \u5C06\u5931\u6548\u3002

noImplements - method

fun noImplements()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u63A5\u53E3\u3002

Notice

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E implements \u5C06\u5931\u6548\u3002

noSuper - method

fun noSuper()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u7EE7\u627F\u4E0E\u63A5\u53E3\u3002

\u6B64\u65F6 Class \u53EA\u5E94\u8BE5\u7EE7\u627F\u4E8E Any\u3002

Notice

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E extends \u4E0E implements \u5C06\u5931\u6548\u3002

enclosing - method

inline fun <reified T> enclosing()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

enclosing - method

fun enclosing(vararg name: String)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

FromPackageRules - class

inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
-

Change Records

v1.0.0 first

Function Illustrate

\u5305\u540D\u8303\u56F4\u540D\u79F0\u8FC7\u6EE4\u5339\u914D\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

absolute - method

fun absolute()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5305\u540D\u7EDD\u5BF9\u5339\u914D\u3002

\u4F8B\u5982\u6709\u5982\u4E0B\u5305\u540D \u2193

com.demo.test.a

com.demo.test.a.b

com.demo.test.active

\u82E5\u5305\u540D\u6761\u4EF6\u4E3A com.demo.test.a \u5219\u7EDD\u5BF9\u5339\u914D\u4EC5\u80FD\u5339\u914D\u5230\u7B2C\u4E00\u4E2A\u3002

\u76F8\u53CD\u5730\uFF0C\u4E0D\u8BBE\u7F6E\u4EE5\u4E0A\u793A\u4F8B\u4F1A\u5168\u90E8\u5339\u914D\u3002

ClassNameRules - class

inner class ClassNameRules internal constructor(private val name: ClassRulesData.NameRulesData)
-

Change Records

v1.0.0 first

Function Illustrate

\u7C7B\u540D\u5339\u914D\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

optional - method

fun optional()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u7C7B\u540D\u53EF\u9009\u3002

\u4F8B\u5982\u6709\u5982\u4E0B\u7C7B\u540D \u2193

com.demo.Test fullName / Test simpleName

defpackage.a fullName / a simpleName

\u8FD9\u4E24\u4E2A\u7C7B\u540D\u90FD\u662F\u540C\u4E00\u4E2A\u7C7B\uFF0C\u4F46\u662F\u5728\u6709\u4E9B\u7248\u672C\u4E2D\u88AB\u6DF7\u6DC6\u6709\u4E9B\u7248\u672C\u6CA1\u6709\u3002

\u6B64\u65F6\u53EF\u8BBE\u7F6E\u7C7B\u540D\u4E3A com.demo.Test fullName / Test simpleName\u3002

\u8FD9\u6837\u5C31\u53EF\u5728\u5B8C\u5168\u5339\u914D\u7C7B\u540D\u60C5\u51B5\u4E0B\u4F7F\u7528\u7C7B\u540D\u800C\u5FFD\u7565\u5176\u5B83\u67E5\u627E\u6761\u4EF6\uFF0C\u5426\u5219\u5FFD\u7565\u6B64\u6761\u4EF6\u7EE7\u7EED\u4F7F\u7528\u5176\u5B83\u67E5\u627E\u6761\u4EF6\u3002

member - method

inline fun member(initiate: MemberRules.() -> Unit): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Member \u6761\u4EF6\u3002

field - method

inline fun field(initiate: FieldRules.() -> Unit): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Field \u6761\u4EF6\u3002

method - method

inline fun method(initiate: MethodRules.() -> Unit): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Method \u6761\u4EF6\u3002

constructor - method

inline fun constructor(initiate: ConstructorRules.() -> Unit): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Constructor \u6761\u4EF6\u3002

Result - class

inner class Result internal constructor(internal var isNotFound: Boolean, internal var throwable: Throwable?) : BaseResult
-

Change Records

v1.0.0 first

Function Illustrate

Class \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

get - method

fun get(): Class<*>?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Class \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Class \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 wait \u65B9\u6CD5\u3002

all - method

fun all(): HashSet<Class<*>>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 waitAll \u65B9\u6CD5\u3002

all - method

fun all(result: (Class<*>) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4 (\u4F9D\u6B21\u904D\u5386)\u3002

\u56DE\u8C03\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u4E0D\u4F1A\u6267\u884C\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 waitAll \u65B9\u6CD5\u3002

wait - method

fun wait(result: (Class<*>?) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Class \u672C\u8EAB (\u5F02\u6B65)\u3002

\u82E5\u6709\u591A\u4E2A Class \u7ED3\u679C\u53EA\u4F1A\u56DE\u8C03\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u56DE\u8C03 null\u3002

\u4F60\u9700\u8981\u8BBE\u7F6E async \u540E\u6B64\u65B9\u6CD5\u624D\u4F1A\u88AB\u56DE\u8C03\uFF0C\u5426\u5219\u8BF7\u4F7F\u7528 get \u65B9\u6CD5\u3002

waitAll - method

fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4 (\u5F02\u6B65)\u3002

\u56DE\u8C03\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u56DE\u8C03\u7A7A\u7684 HashSet\u3002

\u4F60\u9700\u8981\u8BBE\u7F6E async \u540E\u6B64\u65B9\u6CD5\u624D\u4F1A\u88AB\u56DE\u8C03\uFF0C\u5426\u5219\u8BF7\u4F7F\u7528 all \u65B9\u6CD5\u3002

onNoClassDefFoundError - method

fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Class \u65F6\u3002

ignored - method

fun ignored(): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoClassDefFoundError \u65B9\u6CD5\u3002

`,310),p=[l];function c(t,r){return o(),e("div",null,p)}const i=s(n,[["render",c],["__file","DexClassFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/DexClassFinder.html.50819339.js b/docs/assets/DexClassFinder.html.50819339.js deleted file mode 100644 index f459888..0000000 --- a/docs/assets/DexClassFinder.html.50819339.js +++ /dev/null @@ -1,46 +0,0 @@ -import{_ as s,o,c as a,a as e}from"./app.2add9aa5.js";const n={},l=e(`

DexClassFinder - class

class DexClassFinder internal constructor(
-    private val context: Context?,
-    internal var name: String,
-    internal var async: Boolean,
-    override val loaderSet: ClassLoader?
-) : ClassBaseFinder
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class \u67E5\u627E\u7C7B\u3002

\u53EF\u4F7F\u7528 BaseDexClassLoader \u901A\u8FC7\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u6307\u5B9A Class \u6216\u4E00\u7EC4 Class\u3002

\u6CE8\u610F

\u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

companion object - object

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

clearCache - method

fun clearCache(context: Context, versionName: String?, versionCode: Long?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6E05\u9664\u5F53\u524D DexClassFinder \u7684 Class \u7F13\u5B58\u3002

\u9002\u7528\u4E8E\u5168\u90E8\u901A\u8FC7 ClassLoader.searchClass \u83B7\u53D6\u7684 DexClassFinder\u3002

fullName - field

var fullName: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

\u4F8B\u5982 com.demo.Test \u9700\u8981\u586B\u5199 com.demo.Test\u3002

simpleName - field

var simpleName: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u4F1A\u4E3A\u7A7A\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u4F7F\u7528 singleName\u3002

singleName - field

var singleName: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u53EA\u9700\u8981\u586B\u5199 Test$InnerTest\u3002

from - method

fun from(vararg name: String): FromPackageRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5728\u6307\u5B9A\u5305\u540D\u8303\u56F4\u67E5\u627E\u5F53\u524D Class\u3002

\u8BBE\u7F6E\u540E\u4EC5\u4F1A\u5728\u5F53\u524D name \u5F00\u5934\u5339\u914D\u7684\u5305\u540D\u8DEF\u5F84\u4E0B\u8FDB\u884C\u67E5\u627E\uFF0C\u53EF\u63D0\u5347\u67E5\u627E\u901F\u5EA6\u3002

\u4F8B\u5982 \u2193

com.demo.test

com.demo.test.demo

\u6CE8\u610F

\u5EFA\u8BAE\u8BBE\u7F6E\u6B64\u53C2\u6570\u6307\u5B9A\u67E5\u627E\u8303\u56F4\uFF0C\u5426\u5219 Class \u8FC7\u591A\u65F6\u5C06\u4F1A\u975E\u5E38\u6162\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

fullName - method

fun fullName(value: String): ClassNameRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

\u4F8B\u5982 com.demo.Test \u9700\u8981\u586B\u5199 com.demo.Test\u3002

simpleName - method

fun simpleName(value: String): ClassNameRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u4F1A\u4E3A\u7A7A\uFF0C\u6B64\u65F6\u4F60\u53EF\u4EE5\u4F7F\u7528 singleName\u3002

singleName - method

fun singleName(value: String): ClassNameRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

\u4F8B\u5982 com.demo.Test \u53EA\u9700\u8981\u586B\u5199 Test\u3002

\u5BF9\u4E8E\u533F\u540D\u7C7B\u4F8B\u5982 com.demo.Test$InnerTest \u53EA\u9700\u8981\u586B\u5199 Test$InnerTest\u3002

fullName - method

fun fullName(conditions: NameConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u5B8C\u6574\u540D\u79F0\u6761\u4EF6\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getName\u3002

simpleName - method

fun simpleName(conditions: NameConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u7B80\u5355\u540D\u79F0\u6761\u4EF6\u3002

\u53EA\u4F1A\u67E5\u627E\u5339\u914D\u5230\u7684 Class.getSimpleName\u3002

singleName - method

fun singleName(conditions: NameConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u72EC\u7ACB\u540D\u79F0\u6761\u4EF6\u3002

\u8BBE\u7F6E\u540E\u5C06\u9996\u5148\u4F7F\u7528 Class.getSimpleName\uFF0C\u82E5\u4E3A\u7A7A\u5219\u4F1A\u4F7F\u7528 Class.getName \u8FDB\u884C\u5904\u7406\u3002

extends - method

inline fun <reified T> extends()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u7EE7\u627F\u7684\u7236\u7C7B\u3002

extends - method

fun extends(vararg name: String)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u7EE7\u627F\u7684\u7236\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684\u7236\u7C7B\u3002

implements - method

inline fun <reified T> implements()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u5B9E\u73B0\u7684\u63A5\u53E3\u7C7B\u3002

implements - method

fun implements(vararg name: String)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u5B9E\u73B0\u7684\u63A5\u53E3\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684\u63A5\u53E3\u7C7B\u3002

anonymous - method

fun anonymous()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6807\u8BC6 Class \u4E3A\u533F\u540D\u7C7B\u3002

\u4F8B\u5982 com.demo.Test$1 \u6216 com.demo.Test$InnerTest\u3002

\u6807\u8BC6\u540E\u4F60\u53EF\u4EE5\u4F7F\u7528 enclosing \u6765\u8FDB\u4E00\u6B65\u6307\u5B9A\u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

noExtends - method

fun noExtends()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u7EE7\u627F\u3002

\u6B64\u65F6 Class \u53EA\u5E94\u8BE5\u7EE7\u627F\u4E8E Any\u3002

\u6CE8\u610F

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E extends \u5C06\u5931\u6548\u3002

noImplements - method

fun noImplements()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u63A5\u53E3\u3002

\u6CE8\u610F

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E implements \u5C06\u5931\u6548\u3002

noSuper - method

fun noSuper()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6CA1\u6709\u4EFB\u4F55\u7EE7\u627F\u4E0E\u63A5\u53E3\u3002

\u6B64\u65F6 Class \u53EA\u5E94\u8BE5\u7EE7\u627F\u4E8E Any\u3002

\u6CE8\u610F

\u8BBE\u7F6E\u6B64\u6761\u4EF6\u540E extends \u4E0E implements \u5C06\u5931\u6548\u3002

enclosing - method

inline fun <reified T> enclosing()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

enclosing - method

fun enclosing(vararg name: String)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u533F\u540D\u7C7B\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

\u4F1A\u540C\u65F6\u67E5\u627E name \u4E2D\u6240\u6709\u5339\u914D\u7684 (\u5C01\u95ED\u7C7B) \u4E3B\u7C7B\u3002

FromPackageRules - class

inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5305\u540D\u8303\u56F4\u540D\u79F0\u8FC7\u6EE4\u5339\u914D\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

absolute - method

fun absolute()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5305\u540D\u7EDD\u5BF9\u5339\u914D\u3002

\u4F8B\u5982\u6709\u5982\u4E0B\u5305\u540D \u2193

com.demo.test.a

com.demo.test.a.b

com.demo.test.active

\u82E5\u5305\u540D\u6761\u4EF6\u4E3A com.demo.test.a \u5219\u7EDD\u5BF9\u5339\u914D\u4EC5\u80FD\u5339\u914D\u5230\u7B2C\u4E00\u4E2A\u3002

\u76F8\u53CD\u5730\uFF0C\u4E0D\u8BBE\u7F6E\u4EE5\u4E0A\u793A\u4F8B\u4F1A\u5168\u90E8\u5339\u914D\u3002

ClassNameRules - class

inner class ClassNameRules internal constructor(private val name: ClassRulesData.NameRulesData)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u7C7B\u540D\u5339\u914D\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

optional - method

fun optional()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u7C7B\u540D\u53EF\u9009\u3002

\u4F8B\u5982\u6709\u5982\u4E0B\u7C7B\u540D \u2193

com.demo.Test fullName / Test simpleName

defpackage.a fullName / a simpleName

\u8FD9\u4E24\u4E2A\u7C7B\u540D\u90FD\u662F\u540C\u4E00\u4E2A\u7C7B\uFF0C\u4F46\u662F\u5728\u6709\u4E9B\u7248\u672C\u4E2D\u88AB\u6DF7\u6DC6\u6709\u4E9B\u7248\u672C\u6CA1\u6709\u3002

\u6B64\u65F6\u53EF\u8BBE\u7F6E\u7C7B\u540D\u4E3A com.demo.Test fullName / Test simpleName\u3002

\u8FD9\u6837\u5C31\u53EF\u5728\u5B8C\u5168\u5339\u914D\u7C7B\u540D\u60C5\u51B5\u4E0B\u4F7F\u7528\u7C7B\u540D\u800C\u5FFD\u7565\u5176\u5B83\u67E5\u627E\u6761\u4EF6\uFF0C\u5426\u5219\u5FFD\u7565\u6B64\u6761\u4EF6\u7EE7\u7EED\u4F7F\u7528\u5176\u5B83\u67E5\u627E\u6761\u4EF6\u3002

member - method

inline fun member(initiate: MemberRules.() -> Unit): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Member \u6761\u4EF6\u3002

field - method

inline fun field(initiate: FieldRules.() -> Unit): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Field \u6761\u4EF6\u3002

method - method

inline fun method(initiate: MethodRules.() -> Unit): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Method \u6761\u4EF6\u3002

constructor - method

inline fun constructor(initiate: ConstructorRules.() -> Unit): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Class \u6EE1\u8DB3\u7684 Constructor \u6761\u4EF6\u3002

Result - class

inner class Result internal constructor(internal var isNotFound: Boolean, internal var throwable: Throwable?) : BaseResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

get - method

fun get(): Class<*>?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Class \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Class \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 wait \u65B9\u6CD5\u3002

all - method

fun all(): HashSet<Class<*>>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 waitAll \u65B9\u6CD5\u3002

all - method

fun all(result: (Class<*>) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4 (\u4F9D\u6B21\u904D\u5386)\u3002

\u56DE\u8C03\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u4E0D\u4F1A\u6267\u884C\u3002

\u82E5\u4F60\u8BBE\u7F6E\u4E86 async \u8BF7\u4F7F\u7528 waitAll \u65B9\u6CD5\u3002

wait - method

fun wait(result: (Class<*>?) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Class \u672C\u8EAB (\u5F02\u6B65)\u3002

\u82E5\u6709\u591A\u4E2A Class \u7ED3\u679C\u53EA\u4F1A\u56DE\u8C03\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u56DE\u8C03 null\u3002

\u4F60\u9700\u8981\u8BBE\u7F6E async \u540E\u6B64\u65B9\u6CD5\u624D\u4F1A\u88AB\u56DE\u8C03\uFF0C\u5426\u5219\u8BF7\u4F7F\u7528 get \u65B9\u6CD5\u3002

waitAll - method

fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Class \u672C\u8EAB\u6570\u7EC4 (\u5F02\u6B65)\u3002

\u56DE\u8C03\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Class \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u56DE\u8C03\u7A7A\u7684 HashSet\u3002

\u4F60\u9700\u8981\u8BBE\u7F6E async \u540E\u6B64\u65B9\u6CD5\u624D\u4F1A\u88AB\u56DE\u8C03\uFF0C\u5426\u5219\u8BF7\u4F7F\u7528 all \u65B9\u6CD5\u3002

onNoClassDefFoundError - method

fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Class \u65F6\u3002

ignored - method

fun ignored(): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoClassDefFoundError \u65B9\u6CD5\u3002

`,309),p=[l];function c(t,r){return o(),a("div",null,p)}const i=s(n,[["render",c],["__file","DexClassFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/DexClassFinder.html.7f9c18ee.js b/docs/assets/DexClassFinder.html.7f9c18ee.js deleted file mode 100644 index f6a78e5..0000000 --- a/docs/assets/DexClassFinder.html.7f9c18ee.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-6d6cd473","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html","title":"DexClassFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"companion object - object","slug":"companion-object-object","link":"#companion-object-object","children":[{"level":3,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]}]},{"level":2,"title":"fullName - field","slug":"fullname-field","link":"#fullname-field","children":[]},{"level":2,"title":"simpleName - field","slug":"simplename-field","link":"#simplename-field","children":[]},{"level":2,"title":"singleName - field","slug":"singlename-field","link":"#singlename-field","children":[]},{"level":2,"title":"from - method","slug":"from-method","link":"#from-method","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"fullName - method","slug":"fullname-method","link":"#fullname-method","children":[]},{"level":2,"title":"simpleName - method","slug":"simplename-method","link":"#simplename-method","children":[]},{"level":2,"title":"singleName - method","slug":"singlename-method","link":"#singlename-method","children":[]},{"level":2,"title":"fullName - method","slug":"fullname-method-1","link":"#fullname-method-1","children":[]},{"level":2,"title":"simpleName - method","slug":"simplename-method-1","link":"#simplename-method-1","children":[]},{"level":2,"title":"singleName - method","slug":"singlename-method-1","link":"#singlename-method-1","children":[]},{"level":2,"title":"extends - method","slug":"extends-method","link":"#extends-method","children":[]},{"level":2,"title":"extends - method","slug":"extends-method-1","link":"#extends-method-1","children":[]},{"level":2,"title":"implements - method","slug":"implements-method","link":"#implements-method","children":[]},{"level":2,"title":"implements - method","slug":"implements-method-1","link":"#implements-method-1","children":[]},{"level":2,"title":"anonymous - method","slug":"anonymous-method","link":"#anonymous-method","children":[]},{"level":2,"title":"noExtends - method","slug":"noextends-method","link":"#noextends-method","children":[]},{"level":2,"title":"noImplements - method","slug":"noimplements-method","link":"#noimplements-method","children":[]},{"level":2,"title":"noSuper - method","slug":"nosuper-method","link":"#nosuper-method","children":[]},{"level":2,"title":"enclosing - method","slug":"enclosing-method","link":"#enclosing-method","children":[]},{"level":2,"title":"enclosing - method","slug":"enclosing-method-1","link":"#enclosing-method-1","children":[]},{"level":2,"title":"FromPackageRules - class","slug":"frompackagerules-class","link":"#frompackagerules-class","children":[{"level":3,"title":"absolute - method","slug":"absolute-method","link":"#absolute-method","children":[]}]},{"level":2,"title":"ClassNameRules - class","slug":"classnamerules-class","link":"#classnamerules-class","children":[{"level":3,"title":"optional - method","slug":"optional-method","link":"#optional-method","children":[]}]},{"level":2,"title":"member - method","slug":"member-method","link":"#member-method","children":[]},{"level":2,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":2,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":2,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":2,"title":"Result - class","slug":"result-class","link":"#result-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"onNoClassDefFoundError - method","slug":"onnoclassdeffounderror-method","link":"#onnoclassdeffounderror-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md"}');export{e as data}; diff --git a/docs/assets/DexClassFinder.html.e0965adb.js b/docs/assets/DexClassFinder.html.e0965adb.js deleted file mode 100644 index 36c241a..0000000 --- a/docs/assets/DexClassFinder.html.e0965adb.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-2d13d624","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html","title":"DexClassFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"companion object - object","slug":"companion-object-object","link":"#companion-object-object","children":[{"level":3,"title":"clearCache - method","slug":"clearcache-method","link":"#clearcache-method","children":[]}]},{"level":2,"title":"fullName - field","slug":"fullname-field","link":"#fullname-field","children":[]},{"level":2,"title":"simpleName - field","slug":"simplename-field","link":"#simplename-field","children":[]},{"level":2,"title":"singleName - field","slug":"singlename-field","link":"#singlename-field","children":[]},{"level":2,"title":"from - method","slug":"from-method","link":"#from-method","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"fullName - method","slug":"fullname-method","link":"#fullname-method","children":[]},{"level":2,"title":"simpleName - method","slug":"simplename-method","link":"#simplename-method","children":[]},{"level":2,"title":"singleName - method","slug":"singlename-method","link":"#singlename-method","children":[]},{"level":2,"title":"fullName - method","slug":"fullname-method-1","link":"#fullname-method-1","children":[]},{"level":2,"title":"simpleName - method","slug":"simplename-method-1","link":"#simplename-method-1","children":[]},{"level":2,"title":"singleName - method","slug":"singlename-method-1","link":"#singlename-method-1","children":[]},{"level":2,"title":"extends - method","slug":"extends-method","link":"#extends-method","children":[]},{"level":2,"title":"extends - method","slug":"extends-method-1","link":"#extends-method-1","children":[]},{"level":2,"title":"implements - method","slug":"implements-method","link":"#implements-method","children":[]},{"level":2,"title":"implements - method","slug":"implements-method-1","link":"#implements-method-1","children":[]},{"level":2,"title":"anonymous - method","slug":"anonymous-method","link":"#anonymous-method","children":[]},{"level":2,"title":"noExtends - method","slug":"noextends-method","link":"#noextends-method","children":[]},{"level":2,"title":"noImplements - method","slug":"noimplements-method","link":"#noimplements-method","children":[]},{"level":2,"title":"noSuper - method","slug":"nosuper-method","link":"#nosuper-method","children":[]},{"level":2,"title":"enclosing - method","slug":"enclosing-method","link":"#enclosing-method","children":[]},{"level":2,"title":"enclosing - method","slug":"enclosing-method-1","link":"#enclosing-method-1","children":[]},{"level":2,"title":"FromPackageRules - class","slug":"frompackagerules-class","link":"#frompackagerules-class","children":[{"level":3,"title":"absolute - method","slug":"absolute-method","link":"#absolute-method","children":[]}]},{"level":2,"title":"ClassNameRules - class","slug":"classnamerules-class","link":"#classnamerules-class","children":[{"level":3,"title":"optional - method","slug":"optional-method","link":"#optional-method","children":[]}]},{"level":2,"title":"member - method","slug":"member-method","link":"#member-method","children":[]},{"level":2,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":2,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":2,"title":"constructor - method","slug":"constructor-method","link":"#constructor-method","children":[]},{"level":2,"title":"Result - class","slug":"result-class","link":"#result-class","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"all - method","slug":"all-method-1","link":"#all-method-1","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"onNoClassDefFoundError - method","slug":"onnoclassdeffounderror-method","link":"#onnoclassdeffounderror-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md"}');export{e as data}; diff --git a/docs/assets/FieldFinder.html.00221b25.js b/docs/assets/FieldFinder.html.00221b25.js deleted file mode 100644 index 59a9d2c..0000000 --- a/docs/assets/FieldFinder.html.00221b25.js +++ /dev/null @@ -1,84 +0,0 @@ -import{_ as s,o as n,c as o,a}from"./app.2add9aa5.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldFinder - class

class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
-

Change Records

v1.0.0 first

Function Illustrate

Field \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Field \u6216\u4E00\u7EC4 Field\u3002

name - field

var name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

type - field

var type: Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

order - method

fun order(): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u987A\u5E8F\u7B5B\u9009\u5B57\u8282\u7801\u7684\u4E0B\u6807\u3002

name - method

fun name(value: String): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

name - method

fun name(conditions: NameConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u6761\u4EF6\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

type - method

fun type(value: Any): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

type - method

fun type(conditions: ObjectConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Field\u3002

Notice

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

Field \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

field - method

inline fun field(initiate: FieldConditions): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Field\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Field\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Field>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

Function Example

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Field \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

The following example

field {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
-

Change Records

v1.0.0 first

Function Illustrate

Field \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

The following example

field {
-    // Your code here.
-}.result {
-    get(instance).set("something")
-    get(instance).string()
-    get(instance).cast<CustomClass>()
-    get().boolean()
-    all(instance)
-    give()
-    giveAll()
-    onNoSuchField {}
-}
-

get - method

fun get(instance: Any?): Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Function Example

\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u5F97\u5230 Field \u7684\u5B9E\u4F8B\u4EE5\u53CA\u4F7F\u7528\u5B83\u8FDB\u884C\u8BBE\u7F6E\u5B9E\u4F8B\u3002

The following example

field {
-    // Your code here.
-}.get(instance).set("something")
-

\u5982\u679C\u4F60\u53D6\u5230\u7684\u662F\u9759\u6001 Field\uFF0C\u53EF\u4EE5\u4E0D\u9700\u8981\u8BBE\u7F6E\u5B9E\u4F8B\u3002

The following example

field {
-    // Your code here.
-}.get().set("something")
-

all - method

fun all(instance: Any?): ArrayList<Instance>
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u7ED3\u679C\u3002

Function Example

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Field\uFF0C\u5176 Field \u6240\u5728\u5B9E\u4F8B\u7528\u6CD5\u4E0E get \u76F8\u540C\u3002

The following example

field {
-    // Your code here.
-}.all(instance).forEach { instance ->
-    instance.self
-}
-

give - method

fun give(): Field?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Field \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Field>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Field \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(instance: Any?, initiate: Instance.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u7ED3\u679C\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA Field \u91CD\u67E5\u627E\u529F\u80FD\u3002

Function Example

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Field \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchField \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Field\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

The following example

field {
-    // Your code here.
-}.remedys {
-    field {
-        // Your code here.
-    }
-    field {
-        // Your code here.
-    }
-}
-

onNoSuchField - method

fun onNoSuchField(result: (Throwable) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Field \u65F6\u3002

ignored - method

fun ignored(): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

Notice

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchField \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val field: Field?)
-

Change Records

v1.0.0 first

Function Illustrate

Field \u5B9E\u4F8B\u53D8\u91CF\u5904\u7406\u7C7B\u3002

current - method

fun current(ignored: Boolean): CurrentClass?
-
inline fun current(ignored: Boolean, initiate: CurrentClass.() -> Unit): Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D Field \u81EA\u8EAB self \u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61 CurrentClass\u3002

cast - method

fun <T> cast(): T?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field \u5B9E\u4F8B\u3002

byte - method

fun byte(): Byte?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Byte \u5B9E\u4F8B\u3002

int - method

fun int(): Int
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Int \u5B9E\u4F8B\u3002

long - method

fun long(): Long
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Long \u5B9E\u4F8B\u3002

short - method

fun short(): Short
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Short \u5B9E\u4F8B\u3002

double - method

fun double(): Double
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Double \u5B9E\u4F8B\u3002

float - method

fun float(): Float
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Float \u5B9E\u4F8B\u3002

string - method

fun string(): String
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field String \u5B9E\u4F8B\u3002

char - method

fun char(): Char
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Char \u5B9E\u4F8B\u3002

boolean - method

fun boolean(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Boolean \u5B9E\u4F8B\u3002

any - method

fun any(): Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Any \u5B9E\u4F8B\u3002

array - method

inline fun <reified T> array(): Array<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field Array \u5B9E\u4F8B\u3002

list - method

inline fun <reified T> list(): List<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230\u5F53\u524D Field List \u5B9E\u4F8B\u3002

set - method

fun set(any: Any?)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u3002

setTrue - method

fun setTrue()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A true\u3002

Pay Attention

\u8BF7\u786E\u4FDD\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B\u4E3A Boolean\u3002

setFalse - method

fun setFalse()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A false\u3002

Pay Attention

\u8BF7\u786E\u4FDD\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B\u4E3A Boolean\u3002

setNull - method

fun setNull()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A null\u3002

`,316),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","FieldFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/FieldFinder.html.44edac16.js b/docs/assets/FieldFinder.html.44edac16.js deleted file mode 100644 index 72a5d5e..0000000 --- a/docs/assets/FieldFinder.html.44edac16.js +++ /dev/null @@ -1,84 +0,0 @@ -import{_ as s,o as n,c as o,a}from"./app.2add9aa5.js";const e={},l=a(`

FieldFinder - class

class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Field \u6216\u4E00\u7EC4 Field\u3002

name - field

var name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

type - field

var type: Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

order - method

fun order(): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u987A\u5E8F\u7B5B\u9009\u5B57\u8282\u7801\u7684\u4E0B\u6807\u3002

name - method

fun name(value: String): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

name - method

fun name(conditions: NameConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

type - method

fun type(value: Any): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

type - method

fun type(conditions: ObjectConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Field\u3002

\u6CE8\u610F

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

field - method

inline fun field(initiate: FieldConditions): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Field\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Field\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Field>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Field \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.result {
-    get(instance).set("something")
-    get(instance).string()
-    get(instance).cast<CustomClass>()
-    get().boolean()
-    all(instance)
-    give()
-    giveAll()
-    onNoSuchField {}
-}
-

get - method

fun get(instance: Any?): Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u5F97\u5230 Field \u7684\u5B9E\u4F8B\u4EE5\u53CA\u4F7F\u7528\u5B83\u8FDB\u884C\u8BBE\u7F6E\u5B9E\u4F8B\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.get(instance).set("something")
-

\u5982\u679C\u4F60\u53D6\u5230\u7684\u662F\u9759\u6001 Field\uFF0C\u53EF\u4EE5\u4E0D\u9700\u8981\u8BBE\u7F6E\u5B9E\u4F8B\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.get().set("something")
-

all - method

fun all(instance: Any?): ArrayList<Instance>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u7ED3\u679C\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Field\uFF0C\u5176 Field \u6240\u5728\u5B9E\u4F8B\u7528\u6CD5\u4E0E get \u76F8\u540C\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.all(instance).forEach { instance ->
-    instance.self
-}
-

give - method

fun give(): Field?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Field \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Field>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Field \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(instance: Any?, initiate: Instance.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Field \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Field \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Field \u5B9E\u4F8B\u7ED3\u679C\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA Field \u91CD\u67E5\u627E\u529F\u80FD\u3002

\u529F\u80FD\u793A\u4F8B

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Field \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchField \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Field\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    // Your code here.
-}.remedys {
-    field {
-        // Your code here.
-    }
-    field {
-        // Your code here.
-    }
-}
-

onNoSuchField - method

fun onNoSuchField(result: (Throwable) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Field \u65F6\u3002

ignored - method

fun ignored(): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u6CE8\u610F

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchField \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val field: Field?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u5B9E\u4F8B\u53D8\u91CF\u5904\u7406\u7C7B\u3002

current - method

fun current(ignored: Boolean): CurrentClass?
-
inline fun current(ignored: Boolean, initiate: CurrentClass.() -> Unit): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D Field \u81EA\u8EAB self \u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61 CurrentClass\u3002

cast - method

fun <T> cast(): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field \u5B9E\u4F8B\u3002

byte - method

fun byte(): Byte?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Byte \u5B9E\u4F8B\u3002

int - method

fun int(): Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Int \u5B9E\u4F8B\u3002

long - method

fun long(): Long
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Long \u5B9E\u4F8B\u3002

short - method

fun short(): Short
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Short \u5B9E\u4F8B\u3002

double - method

fun double(): Double
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Double \u5B9E\u4F8B\u3002

float - method

fun float(): Float
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Float \u5B9E\u4F8B\u3002

string - method

fun string(): String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field String \u5B9E\u4F8B\u3002

char - method

fun char(): Char
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Char \u5B9E\u4F8B\u3002

boolean - method

fun boolean(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Boolean \u5B9E\u4F8B\u3002

any - method

fun any(): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Any \u5B9E\u4F8B\u3002

array - method

inline fun <reified T> array(): Array<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field Array \u5B9E\u4F8B\u3002

list - method

inline fun <reified T> list(): List<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230\u5F53\u524D Field List \u5B9E\u4F8B\u3002

set - method

fun set(any: Any?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u3002

setTrue - method

fun setTrue()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A true\u3002

\u7279\u522B\u6CE8\u610F

\u8BF7\u786E\u4FDD\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B\u4E3A Boolean\u3002

setFalse - method

fun setFalse()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A false\u3002

\u7279\u522B\u6CE8\u610F

\u8BF7\u786E\u4FDD\u5B9E\u4F8B\u5BF9\u8C61\u7C7B\u578B\u4E3A Boolean\u3002

setNull - method

fun setNull()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Field \u5B9E\u4F8B\u4E3A null\u3002

`,315),p=[l];function c(t,r){return n(),o("div",null,p)}const i=s(e,[["render",c],["__file","FieldFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/FieldFinder.html.71816419.js b/docs/assets/FieldFinder.html.71816419.js deleted file mode 100644 index e74eb8d..0000000 --- a/docs/assets/FieldFinder.html.71816419.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-293ae898","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html","title":"FieldFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"type - field","slug":"type-field","link":"#type-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"type - method","slug":"type-method","link":"#type-method","children":[]},{"level":2,"title":"type - method","slug":"type-method-1","link":"#type-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchField - method","slug":"onnosuchfield-method","link":"#onnosuchfield-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md"}');export{e as data}; diff --git a/docs/assets/FieldFinder.html.d5dcfef4.js b/docs/assets/FieldFinder.html.d5dcfef4.js deleted file mode 100644 index 571907f..0000000 --- a/docs/assets/FieldFinder.html.d5dcfef4.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-4b907076","path":"/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html","title":"FieldFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"type - field","slug":"type-field","link":"#type-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"type - method","slug":"type-method","link":"#type-method","children":[]},{"level":2,"title":"type - method","slug":"type-method-1","link":"#type-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"field - method","slug":"field-method","link":"#field-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchField - method","slug":"onnosuchfield-method","link":"#onnosuchfield-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md"}');export{e as data}; diff --git a/docs/assets/FieldRules.html.0a9d082d.js b/docs/assets/FieldRules.html.0a9d082d.js deleted file mode 100644 index 4cfce38..0000000 --- a/docs/assets/FieldRules.html.0a9d082d.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-30993156","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html","title":"FieldRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"type - field","slug":"type-field","link":"#type-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"type - method","slug":"type-method","link":"#type-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md"}');export{e as data}; diff --git a/docs/assets/FieldRules.html.14cfcb37.js b/docs/assets/FieldRules.html.14cfcb37.js deleted file mode 100644 index 39c0b34..0000000 --- a/docs/assets/FieldRules.html.14cfcb37.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as s,o,c as e,a}from"./app.2add9aa5.js";const n={},l=a(`

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u3002

type - field

var type: Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

name - method

fun name(conditions: NameConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u540D\u79F0\u6761\u4EF6\u3002

type - method

fun type(conditions: ObjectConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Field \u7C7B\u578B\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

`,39),p=[l];function c(t,r){return o(),e("div",null,p)}const i=s(n,[["render",c],["__file","FieldRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/FieldRules.html.29bf58de.js b/docs/assets/FieldRules.html.29bf58de.js deleted file mode 100644 index 6cead1c..0000000 --- a/docs/assets/FieldRules.html.29bf58de.js +++ /dev/null @@ -1,7 +0,0 @@ -import{_ as s,o as e,c as o,a as n}from"./app.2add9aa5.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

FieldRules - class

class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
-

Change Records

v1.0.0 first

Function Illustrate

Field \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u3002

type - field

var type: Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

name - method

fun name(conditions: NameConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u540D\u79F0\u6761\u4EF6\u3002

type - method

fun type(conditions: ObjectConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Field \u7C7B\u578B\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u7C7B\u578B\u3002

`,40),p=[l];function t(c,r){return e(),o("div",null,p)}const i=s(a,[["render",t],["__file","FieldRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/FieldRules.html.cc84b291.js b/docs/assets/FieldRules.html.cc84b291.js deleted file mode 100644 index 384b04b..0000000 --- a/docs/assets/FieldRules.html.cc84b291.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-82a85036","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html","title":"FieldRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"type - field","slug":"type-field","link":"#type-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"type - method","slug":"type-method","link":"#type-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md"}');export{e as data}; diff --git a/docs/assets/GenericClass.html.18ef844b.js b/docs/assets/GenericClass.html.18ef844b.js deleted file mode 100644 index ebf11a5..0000000 --- a/docs/assets/GenericClass.html.18ef844b.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-38df33ac","path":"/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html","title":"GenericClass - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"argument - method","slug":"argument-method","link":"#argument-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/bean/GenericClass.md"}');export{e as data}; diff --git a/docs/assets/GenericClass.html.29e779a0.js b/docs/assets/GenericClass.html.29e779a0.js deleted file mode 100644 index 1bcfdf7..0000000 --- a/docs/assets/GenericClass.html.29e779a0.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as s,o as a,c as n,a as o}from"./app.2add9aa5.js";const e={},l=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

argument - method

fun argument(index: Int): Class<*>
-
inline fun <reified T> argument(index: Int): Class<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u6CDB\u578B\u53C2\u6570\u6570\u7EC4\u4E0B\u6807\u7684 Class \u5B9E\u4F8B\u3002

`,14),p=[l];function t(c,r){return a(),n("div",null,p)}const y=s(e,[["render",t],["__file","GenericClass.html.vue"]]);export{y as default}; diff --git a/docs/assets/GenericClass.html.80c441b8.js b/docs/assets/GenericClass.html.80c441b8.js deleted file mode 100644 index 77abfa9..0000000 --- a/docs/assets/GenericClass.html.80c441b8.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c5831246","path":"/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html","title":"GenericClass - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"argument - method","slug":"argument-method","link":"#argument-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.md"}');export{e as data}; diff --git a/docs/assets/GenericClass.html.937c5c5e.js b/docs/assets/GenericClass.html.937c5c5e.js deleted file mode 100644 index 1af279c..0000000 --- a/docs/assets/GenericClass.html.937c5c5e.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as s,o as a,c as n,a as o}from"./app.2add9aa5.js";const l={},e=o(`

GenericClass - class

class GenericClass internal constructor(private val type: ParameterizedType)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

argument - method

fun argument(index: Int): Class<*>
-
inline fun <reified T> argument(index: Int): Class<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u6CDB\u578B\u53C2\u6570\u6570\u7EC4\u4E0B\u6807\u7684 Class \u5B9E\u4F8B\u3002

`,13),p=[e];function c(t,r){return a(),n("div",null,p)}const i=s(l,[["render",c],["__file","GenericClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/GraphicsTypeFactory.html.0a5a863c.js b/docs/assets/GraphicsTypeFactory.html.0a5a863c.js deleted file mode 100644 index 000a3d6..0000000 --- a/docs/assets/GraphicsTypeFactory.html.0a5a863c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-5a1019d6","path":"/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html","title":"GraphicsTypeFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/GraphicsTypeFactory.html.3ab9700c.js b/docs/assets/GraphicsTypeFactory.html.3ab9700c.js deleted file mode 100644 index cc95905..0000000 --- a/docs/assets/GraphicsTypeFactory.html.3ab9700c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-25cdee85","path":"/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html","title":"GraphicsTypeFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/GraphicsTypeFactory.html.c2987428.js b/docs/assets/GraphicsTypeFactory.html.c2987428.js deleted file mode 100644 index 66b5de3..0000000 --- a/docs/assets/GraphicsTypeFactory.html.c2987428.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,r as c,o as n,c as r,b as t,d as s,a as i,e}from"./app.2add9aa5.js";const p={},l=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

GraphicsTypeFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function f(m,g){const o=c("ExternalLinkIcon");return n(),r("div",null,[l,t("p",null,[d,t("a",h,[_,s(o)]),u])])}const k=a(p,[["render",f],["__file","GraphicsTypeFactory.html.vue"]]);export{k as default}; diff --git a/docs/assets/GraphicsTypeFactory.html.d8c3b342.js b/docs/assets/GraphicsTypeFactory.html.d8c3b342.js deleted file mode 100644 index c366094..0000000 --- a/docs/assets/GraphicsTypeFactory.html.d8c3b342.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as c,r as a,o as r,c as s,b as o,d as n,a as i,e}from"./app.2add9aa5.js";const p={},d=i('

GraphicsTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Graphics \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),l=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),f=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(k,m){const t=a("ExternalLinkIcon");return r(),s("div",null,[d,o("p",null,[l,o("a",h,[_,n(t)]),f])])}const b=c(p,[["render",y],["__file","GraphicsTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/MemberRules.html.2d5c89a4.js b/docs/assets/MemberRules.html.2d5c89a4.js deleted file mode 100644 index b1805a8..0000000 --- a/docs/assets/MemberRules.html.2d5c89a4.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-71ecb893","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html","title":"MemberRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md"}');export{e as data}; diff --git a/docs/assets/MemberRules.html.94fb57e3.js b/docs/assets/MemberRules.html.94fb57e3.js deleted file mode 100644 index 379e2ab..0000000 --- a/docs/assets/MemberRules.html.94fb57e3.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3daa8d42","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html","title":"MemberRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md"}');export{e as data}; diff --git a/docs/assets/MemberRules.html.e6dd0524.js b/docs/assets/MemberRules.html.e6dd0524.js deleted file mode 100644 index 278f5c8..0000000 --- a/docs/assets/MemberRules.html.e6dd0524.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
-

Change Records

v1.0.0 first

Function Illustrate

Member \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Member \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

`,14),t=[l];function r(c,p){return e(),o("div",null,t)}const d=s(n,[["render",r],["__file","MemberRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/MemberRules.html.fb90baae.js b/docs/assets/MemberRules.html.fb90baae.js deleted file mode 100644 index 82323ca..0000000 --- a/docs/assets/MemberRules.html.fb90baae.js +++ /dev/null @@ -1,3 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const n={},l=a(`

MemberRules - class

class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Member \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Member \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

`,13),p=[l];function c(r,t){return e(),o("div",null,p)}const i=s(n,[["render",c],["__file","MemberRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/MemberRulesResult.html.0030e851.js b/docs/assets/MemberRulesResult.html.0030e851.js deleted file mode 100644 index 9cfef58..0000000 --- a/docs/assets/MemberRulesResult.html.0030e851.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as s,o as e,c as o,a as n}from"./app.2add9aa5.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Member \u67E5\u627E\u6761\u4EF6\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

none - method

fun none(): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u4E2A\u6570\u4E3A 0\u3002

count - method

fun count(num: Int): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u3002

count - method

fun count(numRange: IntRange): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u8303\u56F4\u3002

count - method

fun count(conditions: CountConditions): MemberRulesResult
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u6761\u4EF6\u3002

`,31),t=[l];function c(p,r){return e(),o("div",null,t)}const i=s(a,[["render",c],["__file","MemberRulesResult.html.vue"]]);export{i as default}; diff --git a/docs/assets/MemberRulesResult.html.0df424dd.js b/docs/assets/MemberRulesResult.html.0df424dd.js deleted file mode 100644 index 536a37b..0000000 --- a/docs/assets/MemberRulesResult.html.0df424dd.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-4f47dfda","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html","title":"MemberRulesResult - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"none - method","slug":"none-method","link":"#none-method","children":[]},{"level":2,"title":"count - method","slug":"count-method","link":"#count-method","children":[]},{"level":2,"title":"count - method","slug":"count-method-1","link":"#count-method-1","children":[]},{"level":2,"title":"count - method","slug":"count-method-2","link":"#count-method-2","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md"}');export{e as data}; diff --git a/docs/assets/MemberRulesResult.html.230c0739.js b/docs/assets/MemberRulesResult.html.230c0739.js deleted file mode 100644 index 3f53db2..0000000 --- a/docs/assets/MemberRulesResult.html.230c0739.js +++ /dev/null @@ -1,6 +0,0 @@ -import{_ as s,o,c as e,a as n}from"./app.2add9aa5.js";const a={},l=n(`

MemberRulesResult - class

class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Member \u67E5\u627E\u6761\u4EF6\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

none - method

fun none(): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u4E2A\u6570\u4E3A 0\u3002

count - method

fun count(num: Int): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u3002

count - method

fun count(numRange: IntRange): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u8303\u56F4\u3002

count - method

fun count(conditions: CountConditions): MemberRulesResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5F53\u524D Member \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u9700\u8981\u5168\u90E8\u5339\u914D\u7684\u4E2A\u6570\u6761\u4EF6\u3002

`,30),p=[l];function c(t,r){return o(),e("div",null,p)}const u=s(a,[["render",c],["__file","MemberRulesResult.html.vue"]]);export{u as default}; diff --git a/docs/assets/MemberRulesResult.html.aa74ca3c.js b/docs/assets/MemberRulesResult.html.aa74ca3c.js deleted file mode 100644 index 71ad784..0000000 --- a/docs/assets/MemberRulesResult.html.aa74ca3c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-503f5f8b","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html","title":"MemberRulesResult - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"none - method","slug":"none-method","link":"#none-method","children":[]},{"level":2,"title":"count - method","slug":"count-method","link":"#count-method","children":[]},{"level":2,"title":"count - method","slug":"count-method-1","link":"#count-method-1","children":[]},{"level":2,"title":"count - method","slug":"count-method-2","link":"#count-method-2","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md"}');export{e as data}; diff --git a/docs/assets/MethodFinder.html.30643f39.js b/docs/assets/MethodFinder.html.30643f39.js deleted file mode 100644 index c8a2738..0000000 --- a/docs/assets/MethodFinder.html.30643f39.js +++ /dev/null @@ -1,81 +0,0 @@ -import{_ as s,o,c as n,a}from"./app.2add9aa5.js";const e={},l=a(`

MethodFinder - class

class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Method \u6216\u4E00\u7EC4 Method\u3002

name - field

var name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

paramCount - field

var paramCount: Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\uFF0C\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Method \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

param - method

fun param(conditions: ObjectsConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

order - method

fun order(): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u987A\u5E8F\u7B5B\u9009\u5B57\u8282\u7801\u7684\u4E0B\u6807\u3002

name - method

fun name(value: String): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

name - method

fun name(conditions: NameConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(num: Int): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(numRange: IntRange): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(conditions: CountConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

returnType - method

fun returnType(value: Any): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

returnType - method

fun returnType(conditions: ObjectConditions): IndexTypeCondition
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

\u7279\u522B\u6CE8\u610F

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Method\u3002

\u6CE8\u610F

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

method - method

inline fun method(initiate: MethodConditions): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Method\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Method\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Method>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Method \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.result {
-    get(instance).call()
-    all(instance)
-    remedys {}
-    onNoSuchMethod {}
-}
-

get - method

fun get(instance: Any?): Instance
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u8BF7\u4F7F\u7528 wait \u56DE\u8C03\u7ED3\u679C\u65B9\u6CD5\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u901A\u8FC7\u83B7\u5F97\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u6765\u6267\u884C Method\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.get(instance).call()
-

\u82E5\u5F53\u524D\u4E3A\u9759\u6001\u65B9\u6CD5\uFF0C\u4F60\u53EF\u4EE5\u4E0D\u8BBE\u7F6E\u5B9E\u4F8B\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.get().call()
-

all - method

fun all(instance: Any?): ArrayList<Instance>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u7ED3\u679C\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Method\uFF0C\u5176\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u7528\u6CD5\u4E0E get \u76F8\u540C\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.all(instance).forEach { instance ->
-    instance.call(...)
-}
-

give - method

fun give(): Method?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Method \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Method>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F97\u5230 Method \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(instance: Any?, initiate: Instance.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u7ED3\u679C\u3002

\u7279\u522B\u6CE8\u610F

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u521B\u5EFA Method \u91CD\u67E5\u627E\u529F\u80FD\u3002

\u529F\u80FD\u793A\u4F8B

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Method \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchMethod \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Method\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // Your code here.
-}.remedys {
-    method {
-        // Your code here.
-    }
-    method {
-        // Your code here.
-    }
-}
-

onNoSuchMethod - method

inline fun onNoSuchMethod(result: (Throwable) -> Unit): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u76D1\u542C\u627E\u4E0D\u5230 Method \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

\u6CE8\u610F

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchMethod \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg args: Any?): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg args: Any?): Byte?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg args: Any?): Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg args: Any?): Long
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg args: Any?): Short
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg args: Any?): Double
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg args: Any?): Float
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg args: Any?): String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg args: Any?): Char
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg args: Any?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg args: Any?): Array<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg args: Any?): List<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,338),p=[l];function c(t,r){return o(),n("div",null,p)}const i=s(e,[["render",c],["__file","MethodFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/MethodFinder.html.3e0643fa.js b/docs/assets/MethodFinder.html.3e0643fa.js deleted file mode 100644 index 42e53f5..0000000 --- a/docs/assets/MethodFinder.html.3e0643fa.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-155c9f97","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md"}');export{e as data}; diff --git a/docs/assets/MethodFinder.html.704be21f.js b/docs/assets/MethodFinder.html.704be21f.js deleted file mode 100644 index 8c65f61..0000000 --- a/docs/assets/MethodFinder.html.704be21f.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-012ee5a6","path":"/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html","title":"MethodFinder - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"order - method","slug":"order-method","link":"#order-method","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"name - method","slug":"name-method-1","link":"#name-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-2","link":"#paramcount-method-2","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method-1","link":"#returntype-method-1","children":[]},{"level":2,"title":"superClass - method","slug":"superclass-method","link":"#superclass-method","children":[]},{"level":2,"title":"RemedyPlan - class","slug":"remedyplan-class","link":"#remedyplan-class","children":[{"level":3,"title":"method - method","slug":"method-method","link":"#method-method","children":[]},{"level":3,"title":"Result - class","slug":"result-class","link":"#result-class","children":[]}]},{"level":2,"title":"Result - class","slug":"result-class-1","link":"#result-class-1","children":[{"level":3,"title":"result - method","slug":"result-method","link":"#result-method","children":[]},{"level":3,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":3,"title":"all - method","slug":"all-method","link":"#all-method","children":[]},{"level":3,"title":"give - method","slug":"give-method","link":"#give-method","children":[]},{"level":3,"title":"giveAll - method","slug":"giveall-method","link":"#giveall-method","children":[]},{"level":3,"title":"wait - method","slug":"wait-method","link":"#wait-method","children":[]},{"level":3,"title":"waitAll - method","slug":"waitall-method","link":"#waitall-method","children":[]},{"level":3,"title":"remedys - method","slug":"remedys-method","link":"#remedys-method","children":[]},{"level":3,"title":"onNoSuchMethod - method","slug":"onnosuchmethod-method","link":"#onnosuchmethod-method","children":[]},{"level":3,"title":"ignored - method","slug":"ignored-method","link":"#ignored-method","children":[]},{"level":3,"title":"Instance - class","slug":"instance-class","link":"#instance-class","children":[]},{"level":3,"title":"array - method","slug":"array-method","link":"#array-method","children":[]},{"level":3,"title":"list - method","slug":"list-method","link":"#list-method","children":[]}]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md"}');export{e as data}; diff --git a/docs/assets/MethodFinder.html.bae1e13a.js b/docs/assets/MethodFinder.html.bae1e13a.js deleted file mode 100644 index 314f923..0000000 --- a/docs/assets/MethodFinder.html.bae1e13a.js +++ /dev/null @@ -1,81 +0,0 @@ -import{_ as s,o as n,c as o,a}from"./app.2add9aa5.js";const e={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodFinder - class

class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
-

Change Records

v1.0.0 first

Function Illustrate

Method \u67E5\u627E\u7C7B\u3002

\u53EF\u901A\u8FC7\u6307\u5B9A\u7C7B\u578B\u67E5\u627E\u6307\u5B9A Method \u6216\u4E00\u7EC4 Method\u3002

name - field

var name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

paramCount - field

var paramCount: Int
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\uFF0C\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

emptyParam - method

fun emptyParam(): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Method \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

Pay Attention

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

param - method

fun param(conditions: ObjectsConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u6761\u4EF6\u3002

Pay Attention

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

order - method

fun order(): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u987A\u5E8F\u7B5B\u9009\u5B57\u8282\u7801\u7684\u4E0B\u6807\u3002

name - method

fun name(value: String): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

name - method

fun name(conditions: NameConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u6761\u4EF6\u3002

Pay Attention

\u82E5\u4E0D\u586B\u5199\u540D\u79F0\u5219\u5FC5\u987B\u5B58\u5728\u4E00\u4E2A\u5176\u5B83\u6761\u4EF6\u3002

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(num: Int): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(numRange: IntRange): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

paramCount - method

fun paramCount(conditions: CountConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

returnType - method

fun returnType(value: Any): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

returnType - method

fun returnType(conditions: ObjectConditions): IndexTypeCondition
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

Pay Attention

\u5B58\u5728\u591A\u4E2A IndexTypeCondition \u65F6\u9664\u4E86 order \u53EA\u4F1A\u751F\u6548\u6700\u540E\u4E00\u4E2A\u3002

superClass - method

fun superClass(isOnlySuperClass: Boolean)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E\u5728 classSet \u7684\u6240\u6709\u7236\u7C7B\u4E2D\u67E5\u627E\u5F53\u524D Method\u3002

Notice

\u82E5\u5F53\u524D classSet \u7684\u7236\u7C7B\u8F83\u591A\u53EF\u80FD\u4F1A\u8017\u65F6\uFF0CAPI \u4F1A\u81EA\u52A8\u5FAA\u73AF\u5230\u7236\u7C7B\u7EE7\u627F\u662F Any \u524D\u7684\u6700\u540E\u4E00\u4E2A\u7C7B\u3002

RemedyPlan - class

inner class RemedyPlan internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

Method \u91CD\u67E5\u627E\u5B9E\u73B0\u7C7B\uFF0C\u53EF\u7D2F\u8BA1\u5931\u8D25\u6B21\u6570\u76F4\u5230\u67E5\u627E\u6210\u529F\u3002

method - method

inline fun method(initiate: MethodConditions): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u9700\u8981\u91CD\u65B0\u67E5\u627E\u7684 Method\u3002

\u4F60\u53EF\u4EE5\u6DFB\u52A0\u591A\u4E2A\u5907\u9009 Method\uFF0C\u76F4\u5230\u6210\u529F\u4E3A\u6B62\uFF0C\u82E5\u6700\u540E\u4F9D\u7136\u5931\u8D25\uFF0C\u5C06\u505C\u6B62\u67E5\u627E\u5E76\u8F93\u51FA\u9519\u8BEF\u65E5\u5FD7\u3002

Result - class

inner class Result internal constructor()
-

Change Records

v1.0.0 first

Function Illustrate

RemedyPlan \u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

onFind - method

fun onFind(initiate: HashSet<Method>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u5728 RemedyPlan \u4E2D\u627E\u5230\u7ED3\u679C\u65F6\u3002

Function Example

\u4F60\u53EF\u4EE5\u65B9\u4FBF\u5730\u5BF9\u91CD\u67E5\u627E\u7684 Method \u5B9E\u73B0 onFind \u65B9\u6CD5\u3002

The following example

method {
-    // Your code here.
-}.onFind {
-    // Your code here.
-}
-

Result - class

inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
-

Change Records

v1.0.0 first

Function Illustrate

Method \u67E5\u627E\u7ED3\u679C\u5B9E\u73B0\u7C7B\u3002

result - method

inline fun result(initiate: Result.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA\u76D1\u542C\u7ED3\u679C\u4E8B\u4EF6\u65B9\u6CD5\u4F53\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528 lambda \u5F62\u5F0F\u521B\u5EFA Result \u7C7B\u3002

The following example

method {
-    // Your code here.
-}.result {
-    get(instance).call()
-    all(instance)
-    remedys {}
-    onNoSuchMethod {}
-}
-

get - method

fun get(instance: Any?): Instance
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u8BF7\u4F7F\u7528 wait \u56DE\u8C03\u7ED3\u679C\u65B9\u6CD5\u3002

Function Example

\u4F60\u53EF\u4EE5\u901A\u8FC7\u83B7\u5F97\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u6765\u6267\u884C Method\u3002

The following example

method {
-    // Your code here.
-}.get(instance).call()
-

\u82E5\u5F53\u524D\u4E3A\u9759\u6001\u65B9\u6CD5\uFF0C\u4F60\u53EF\u4EE5\u4E0D\u8BBE\u7F6E\u5B9E\u4F8B\u3002

The following example

method {
-    // Your code here.
-}.get().call()
-

all - method

fun all(instance: Any?): ArrayList<Instance>
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u7ED3\u679C\u3002

Function Example

\u4F60\u53EF\u4EE5\u901A\u8FC7\u6B64\u65B9\u6CD5\u6765\u83B7\u5F97\u5F53\u524D\u6761\u4EF6\u7ED3\u679C\u4E2D\u5339\u914D\u7684\u5168\u90E8 Method\uFF0C\u5176\u65B9\u6CD5\u6240\u5728\u5B9E\u4F8B\u7528\u6CD5\u4E0E get \u76F8\u540C\u3002

The following example

method {
-    // Your code here.
-}.all(instance).forEach { instance ->
-    instance.call(...)
-}
-

give - method

fun give(): Method?
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Method \u672C\u8EAB\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE null\u3002

giveAll - method

fun giveAll(): HashSet<Method>
-

Change Records

v1.0.0 first

Function Illustrate

\u5F97\u5230 Method \u672C\u8EAB\u6570\u7EC4\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u3002

\u5728\u67E5\u627E\u6761\u4EF6\u627E\u4E0D\u5230\u4EFB\u4F55\u7ED3\u679C\u7684\u65F6\u5019\u5C06\u8FD4\u56DE\u7A7A\u7684 HashSet\u3002

wait - method

fun wait(instance: Any?, initiate: Instance.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u82E5\u6709\u591A\u4E2A Method \u7ED3\u679C\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u4E2A\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

waitAll - method

fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97 Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u6570\u7EC4\uFF0C\u914D\u5408 RemedyPlan \u4F7F\u7528\u3002

\u8FD4\u56DE\u5168\u90E8\u67E5\u627E\u6761\u4EF6\u5339\u914D\u7684\u591A\u4E2A Method \u5B9E\u4F8B\u7ED3\u679C\u3002

Pay Attention

\u82E5\u4F60\u8BBE\u7F6E\u4E86 remedys \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u624D\u80FD\u83B7\u5F97\u7ED3\u679C\u3002

\u82E5\u4F60\u6CA1\u6709\u8BBE\u7F6E remedys \u6B64\u65B9\u6CD5\u5C06\u4E0D\u4F1A\u88AB\u56DE\u8C03\u3002

remedys - method

inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u521B\u5EFA Method \u91CD\u67E5\u627E\u529F\u80FD\u3002

Function Example

\u5F53\u4F60\u9047\u5230\u4E00\u79CD Method \u53EF\u80FD\u5B58\u5728\u4E0D\u540C\u5F62\u5F0F\u7684\u5B58\u5728\u65F6\uFF0C\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u5B83\uFF0C\u800C\u6CA1\u6709\u5FC5\u8981\u4F7F\u7528 onNoSuchMethod \u6355\u83B7\u5F02\u5E38\u4E8C\u6B21\u67E5\u627E Method\u3002

\u82E5\u7B2C\u4E00\u6B21\u67E5\u627E\u5931\u8D25\u4E86\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u8FD9\u91CC\u7EE7\u7EED\u6DFB\u52A0\u6B64\u65B9\u6CD5\u4F53\u76F4\u5230\u6210\u529F\u4E3A\u6B62\u3002

The following example

method {
-    // Your code here.
-}.remedys {
-    method {
-        // Your code here.
-    }
-    method {
-        // Your code here.
-    }
-}
-

onNoSuchMethod - method

inline fun onNoSuchMethod(result: (Throwable) -> Unit): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u76D1\u542C\u627E\u4E0D\u5230 Method \u65F6\u3002

\u53EA\u4F1A\u8FD4\u56DE\u7B2C\u4E00\u6B21\u7684\u9519\u8BEF\u4FE1\u606F\uFF0C\u4E0D\u4F1A\u8FD4\u56DE RemedyPlan \u7684\u9519\u8BEF\u4FE1\u606F\u3002

ignored - method

fun ignored(): Result
-

Change Records

v1.0.0 first

Function Illustrate

\u5FFD\u7565\u5F02\u5E38\u5E76\u505C\u6B62\u6253\u5370\u4EFB\u4F55\u9519\u8BEF\u65E5\u5FD7\u3002

Notice

\u6B64\u65F6\u82E5\u8981\u76D1\u542C\u5F02\u5E38\u7ED3\u679C\uFF0C\u4F60\u9700\u8981\u624B\u52A8\u5B9E\u73B0 onNoSuchMethod \u65B9\u6CD5\u3002

Instance - class

inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
-

Change Records

v1.0.0 first

Function Illustrate

Method \u5B9E\u4F8B\u5904\u7406\u7C7B\u3002

call - method

fun call(vararg args: Any?): Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u4E0D\u6307\u5B9A\u8FD4\u56DE\u503C\u7C7B\u578B\u3002

invoke - method

fun <T> invoke(vararg args: Any?): T?
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A T \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

byte - method

fun byte(vararg args: Any?): Byte?
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Byte \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

int - method

fun int(vararg args: Any?): Int
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Int \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

long - method

fun long(vararg args: Any?): Long
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Long \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

short - method

fun short(vararg args: Any?): Short
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Short \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

double - method

fun double(vararg args: Any?): Double
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Double \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

float - method

fun float(vararg args: Any?): Float
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Float \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

string - method

fun string(vararg args: Any?): String
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A String \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

char - method

fun char(vararg args: Any?): Char
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Char \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

boolean - method

fun boolean(vararg args: Any?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Boolean \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

array - method

inline fun <reified T> array(vararg args: Any?): Array<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A Array \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

list - method

inline fun <reified T> list(vararg args: Any?): List<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u6267\u884C Method\uFF0C\u6307\u5B9A List \u8FD4\u56DE\u503C\u7C7B\u578B\u3002

`,339),p=[l];function t(c,r){return n(),o("div",null,p)}const i=s(e,[["render",t],["__file","MethodFinder.html.vue"]]);export{i as default}; diff --git a/docs/assets/MethodRules.html.46e12f82.js b/docs/assets/MethodRules.html.46e12f82.js deleted file mode 100644 index 73bc05d..0000000 --- a/docs/assets/MethodRules.html.46e12f82.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-5e7e121a","path":"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html","title":"MethodRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md"}');export{e as data}; diff --git a/docs/assets/MethodRules.html.a2613ed0.js b/docs/assets/MethodRules.html.a2613ed0.js deleted file mode 100644 index daada14..0000000 --- a/docs/assets/MethodRules.html.a2613ed0.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as s,o,c as a,a as e}from"./app.2add9aa5.js";const n={},p=e(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
-

Change Records

v1.0.0 first

Function Illustrate

Method \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u3002

paramCount - field

var paramCount: Int
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Method \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

Pay Attention

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

param - method

fun param(conditions: ObjectsConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u6761\u4EF6\u3002

Pay Attention

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

name - method

fun name(conditions: NameConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u540D\u79F0\u6761\u4EF6\u3002

paramCount - method

fun paramCount(numRange: IntRange)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

paramCount - method

fun paramCount(conditions: CountConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

returnType - method

fun returnType(conditions: ObjectConditions)
-

Change Records

v1.0.0 first

Function Illustrate

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

`,84),t=[p];function l(c,r){return o(),a("div",null,t)}const i=s(n,[["render",l],["__file","MethodRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/MethodRules.html.c94c00ea.js b/docs/assets/MethodRules.html.c94c00ea.js deleted file mode 100644 index f30b80e..0000000 --- a/docs/assets/MethodRules.html.c94c00ea.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-2a3be6c9","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html","title":"MethodRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"name - field","slug":"name-field","link":"#name-field","children":[]},{"level":2,"title":"paramCount - field","slug":"paramcount-field","link":"#paramcount-field","children":[]},{"level":2,"title":"returnType - field","slug":"returntype-field","link":"#returntype-field","children":[]},{"level":2,"title":"modifiers - method","slug":"modifiers-method","link":"#modifiers-method","children":[]},{"level":2,"title":"emptyParam - method","slug":"emptyparam-method","link":"#emptyparam-method","children":[]},{"level":2,"title":"param - method","slug":"param-method","link":"#param-method","children":[]},{"level":2,"title":"param - method","slug":"param-method-1","link":"#param-method-1","children":[]},{"level":2,"title":"name - method","slug":"name-method","link":"#name-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method","link":"#paramcount-method","children":[]},{"level":2,"title":"paramCount - method","slug":"paramcount-method-1","link":"#paramcount-method-1","children":[]},{"level":2,"title":"returnType - method","slug":"returntype-method","link":"#returntype-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md"}');export{e as data}; diff --git a/docs/assets/MethodRules.html.e854c479.js b/docs/assets/MethodRules.html.e854c479.js deleted file mode 100644 index 465ebcb..0000000 --- a/docs/assets/MethodRules.html.e854c479.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as s,o,c as a,a as e}from"./app.2add9aa5.js";const n={},p=e(`

MethodRules - class

class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u67E5\u627E\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

name - field

var name: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u3002

paramCount - field

var paramCount: Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u53D8\u91CF\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u3002

\u82E5\u53C2\u6570\u4E2A\u6570\u5C0F\u4E8E\u96F6\u5219\u5FFD\u7565\u5E76\u4F7F\u7528 param\u3002

returnType - field

var returnType: Any?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

modifiers - method

fun modifiers(conditions: ModifierConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u6807\u8BC6\u7B26\u7B5B\u9009\u6761\u4EF6\u3002

\u53EF\u4E0D\u8BBE\u7F6E\u7B5B\u9009\u6761\u4EF6\u3002

emptyParam - method

fun emptyParam()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u7A7A\u53C2\u6570\u3001\u65E0\u53C2\u6570\u3002

param - method

fun param(vararg paramType: Any)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u3002

\u5982\u679C\u540C\u65F6\u4F7F\u7528\u4E86 paramCount \u5219 paramType \u7684\u6570\u91CF\u5FC5\u987B\u4E0E paramCount \u5B8C\u5168\u5339\u914D\u3002

\u5982\u679C Method \u4E2D\u5B58\u5728\u4E00\u4E9B\u65E0\u610F\u4E49\u53C8\u5F88\u957F\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u66FF\u4EE3\u5B83\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

param - method

fun param(conditions: ObjectsConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u6761\u4EF6\u3002

\u7279\u522B\u6CE8\u610F

\u65E0\u53C2 Method \u8BF7\u4F7F\u7528 emptyParam \u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

\u6709\u53C2 Method \u5FC5\u987B\u4F7F\u7528\u6B64\u65B9\u6CD5\u8BBE\u5B9A\u53C2\u6570\u6216\u4F7F\u7528 paramCount \u6307\u5B9A\u4E2A\u6570\u3002

name - method

fun name(conditions: NameConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u540D\u79F0\u6761\u4EF6\u3002

paramCount - method

fun paramCount(numRange: IntRange)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u3002

paramCount - method

fun paramCount(conditions: CountConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

\u4F60\u53EF\u4EE5\u4E0D\u4F7F\u7528 param \u6307\u5B9A\u53C2\u6570\u7C7B\u578B\u800C\u662F\u4EC5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6307\u5B9A\u53C2\u6570\u4E2A\u6570\u6761\u4EF6\u3002

returnType - method

fun returnType(conditions: ObjectConditions)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8BBE\u7F6E Method \u8FD4\u56DE\u503C\u6761\u4EF6\u3002

\u53EF\u4E0D\u586B\u5199\u8FD4\u56DE\u503C\u3002

`,83),l=[p];function t(c,r){return o(),a("div",null,l)}const i=s(n,[["render",t],["__file","MethodRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/ModifierRules.html.063cc2f9.js b/docs/assets/ModifierRules.html.063cc2f9.js deleted file mode 100644 index 1977176..0000000 --- a/docs/assets/ModifierRules.html.063cc2f9.js +++ /dev/null @@ -1 +0,0 @@ -const i=JSON.parse('{"key":"v-701721ec","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html","title":"ModifierRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"isPublic - i-ext-field","slug":"ispublic-i-ext-field","link":"#ispublic-i-ext-field","children":[]},{"level":2,"title":"isPrivate - i-ext-field","slug":"isprivate-i-ext-field","link":"#isprivate-i-ext-field","children":[]},{"level":2,"title":"isProtected - i-ext-field","slug":"isprotected-i-ext-field","link":"#isprotected-i-ext-field","children":[]},{"level":2,"title":"isStatic - i-ext-field","slug":"isstatic-i-ext-field","link":"#isstatic-i-ext-field","children":[]},{"level":2,"title":"isFinal - i-ext-field","slug":"isfinal-i-ext-field","link":"#isfinal-i-ext-field","children":[]},{"level":2,"title":"isSynchronized - i-ext-field","slug":"issynchronized-i-ext-field","link":"#issynchronized-i-ext-field","children":[]},{"level":2,"title":"isVolatile - i-ext-field","slug":"isvolatile-i-ext-field","link":"#isvolatile-i-ext-field","children":[]},{"level":2,"title":"isTransient - i-ext-field","slug":"istransient-i-ext-field","link":"#istransient-i-ext-field","children":[]},{"level":2,"title":"isNative - i-ext-field","slug":"isnative-i-ext-field","link":"#isnative-i-ext-field","children":[]},{"level":2,"title":"isInterface - i-ext-field","slug":"isinterface-i-ext-field","link":"#isinterface-i-ext-field","children":[]},{"level":2,"title":"isAbstract - i-ext-field","slug":"isabstract-i-ext-field","link":"#isabstract-i-ext-field","children":[]},{"level":2,"title":"isStrict - i-ext-field","slug":"isstrict-i-ext-field","link":"#isstrict-i-ext-field","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md"}');export{i as data}; diff --git a/docs/assets/ModifierRules.html.23e3a69f.js b/docs/assets/ModifierRules.html.23e3a69f.js deleted file mode 100644 index 9d8f620..0000000 --- a/docs/assets/ModifierRules.html.23e3a69f.js +++ /dev/null @@ -1,14 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const n={},l=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ModifierRules - class

class ModifierRules private constructor()
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A Class\u3001Member \u63CF\u8FF0\u7B26\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

isPublic - i-ext-field

val isPublic: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B public\u3002

isPrivate - i-ext-field

val isPrivate: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B private\u3002

isProtected - i-ext-field

val isProtected: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B protected\u3002

isStatic - i-ext-field

val isStatic: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B static\u3002

\u5BF9\u4E8E\u4EFB\u610F\u7684\u9759\u6001 Class\u3001Member \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

Notice

Kotlin \u2192 Jvm \u540E\u7684 object \u7C7B\u4E2D\u7684\u65B9\u6CD5\u5E76\u4E0D\u662F\u9759\u6001\u7684\u3002

isFinal - i-ext-field

val isFinal: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B final\u3002

Notice

Kotlin \u2192 Jvm \u540E\u6CA1\u6709 open \u7B26\u53F7\u6807\u8BC6\u7684 Class\u3001Member \u548C\u6CA1\u6709\u4EFB\u4F55\u5173\u8054\u7684 Class\u3001Member \u90FD\u5C06\u4E3A final\u3002

isSynchronized - i-ext-field

val isSynchronized: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B synchronized\u3002

isVolatile - i-ext-field

val isVolatile: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Field \u7C7B\u578B\u662F\u5426\u5305\u542B volatile\u3002

isTransient - i-ext-field

val isTransient: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Field \u7C7B\u578B\u662F\u5426\u5305\u542B transient\u3002

isNative - i-ext-field

val isNative: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Method \u7C7B\u578B\u662F\u5426\u5305\u542B native\u3002

\u5BF9\u4E8E\u4EFB\u610F JNI \u5BF9\u63A5\u7684 Method \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

isInterface - i-ext-field

val isInterface: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class \u7C7B\u578B\u662F\u5426\u5305\u542B interface\u3002

isAbstract - i-ext-field

val isAbstract: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B abstract\u3002

\u5BF9\u4E8E\u4EFB\u610F\u7684\u62BD\u8C61 Class\u3001Member \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

isStrict - i-ext-field

val isStrict: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B strictfp\u3002

`,85),c=[l];function t(i,p){return e(),o("div",null,c)}const d=s(n,[["render",t],["__file","ModifierRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/ModifierRules.html.b6f683e3.js b/docs/assets/ModifierRules.html.b6f683e3.js deleted file mode 100644 index cd7e73a..0000000 --- a/docs/assets/ModifierRules.html.b6f683e3.js +++ /dev/null @@ -1,14 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const n={},l=a(`

ModifierRules - class

class ModifierRules private constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A Class\u3001Member \u63CF\u8FF0\u7B26\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

isPublic - i-ext-field

val isPublic: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B public\u3002

isPrivate - i-ext-field

val isPrivate: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B private\u3002

isProtected - i-ext-field

val isProtected: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B protected\u3002

isStatic - i-ext-field

val isStatic: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B static\u3002

\u5BF9\u4E8E\u4EFB\u610F\u7684\u9759\u6001 Class\u3001Member \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

\u6CE8\u610F

Kotlin \u2192 Jvm \u540E\u7684 object \u7C7B\u4E2D\u7684\u65B9\u6CD5\u5E76\u4E0D\u662F\u9759\u6001\u7684\u3002

isFinal - i-ext-field

val isFinal: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B final\u3002

\u6CE8\u610F

Kotlin \u2192 Jvm \u540E\u6CA1\u6709 open \u7B26\u53F7\u6807\u8BC6\u7684 Class\u3001Member \u548C\u6CA1\u6709\u4EFB\u4F55\u5173\u8054\u7684 Class\u3001Member \u90FD\u5C06\u4E3A final\u3002

isSynchronized - i-ext-field

val isSynchronized: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B synchronized\u3002

isVolatile - i-ext-field

val isVolatile: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u7C7B\u578B\u662F\u5426\u5305\u542B volatile\u3002

isTransient - i-ext-field

val isTransient: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Field \u7C7B\u578B\u662F\u5426\u5305\u542B transient\u3002

isNative - i-ext-field

val isNative: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Method \u7C7B\u578B\u662F\u5426\u5305\u542B native\u3002

\u5BF9\u4E8E\u4EFB\u610F JNI \u5BF9\u63A5\u7684 Method \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

isInterface - i-ext-field

val isInterface: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class \u7C7B\u578B\u662F\u5426\u5305\u542B interface\u3002

isAbstract - i-ext-field

val isAbstract: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B abstract\u3002

\u5BF9\u4E8E\u4EFB\u610F\u7684\u62BD\u8C61 Class\u3001Member \u53EF\u6DFB\u52A0\u6B64\u63CF\u8FF0\u8FDB\u884C\u786E\u5B9A\u3002

isStrict - i-ext-field

val isStrict: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

Class\u3001Member \u7C7B\u578B\u662F\u5426\u5305\u542B strictfp\u3002

`,84),c=[l];function t(p,i){return e(),o("div",null,c)}const r=s(n,[["render",t],["__file","ModifierRules.html.vue"]]);export{r as default}; diff --git a/docs/assets/ModifierRules.html.bf55a30e.js b/docs/assets/ModifierRules.html.bf55a30e.js deleted file mode 100644 index 8c7b258..0000000 --- a/docs/assets/ModifierRules.html.bf55a30e.js +++ /dev/null @@ -1 +0,0 @@ -const i=JSON.parse('{"key":"v-56071599","path":"/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html","title":"ModifierRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"isPublic - i-ext-field","slug":"ispublic-i-ext-field","link":"#ispublic-i-ext-field","children":[]},{"level":2,"title":"isPrivate - i-ext-field","slug":"isprivate-i-ext-field","link":"#isprivate-i-ext-field","children":[]},{"level":2,"title":"isProtected - i-ext-field","slug":"isprotected-i-ext-field","link":"#isprotected-i-ext-field","children":[]},{"level":2,"title":"isStatic - i-ext-field","slug":"isstatic-i-ext-field","link":"#isstatic-i-ext-field","children":[]},{"level":2,"title":"isFinal - i-ext-field","slug":"isfinal-i-ext-field","link":"#isfinal-i-ext-field","children":[]},{"level":2,"title":"isSynchronized - i-ext-field","slug":"issynchronized-i-ext-field","link":"#issynchronized-i-ext-field","children":[]},{"level":2,"title":"isVolatile - i-ext-field","slug":"isvolatile-i-ext-field","link":"#isvolatile-i-ext-field","children":[]},{"level":2,"title":"isTransient - i-ext-field","slug":"istransient-i-ext-field","link":"#istransient-i-ext-field","children":[]},{"level":2,"title":"isNative - i-ext-field","slug":"isnative-i-ext-field","link":"#isnative-i-ext-field","children":[]},{"level":2,"title":"isInterface - i-ext-field","slug":"isinterface-i-ext-field","link":"#isinterface-i-ext-field","children":[]},{"level":2,"title":"isAbstract - i-ext-field","slug":"isabstract-i-ext-field","link":"#isabstract-i-ext-field","children":[]},{"level":2,"title":"isStrict - i-ext-field","slug":"isstrict-i-ext-field","link":"#isstrict-i-ext-field","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md"}');export{i as data}; diff --git a/docs/assets/NameRules.html.2124d233.js b/docs/assets/NameRules.html.2124d233.js deleted file mode 100644 index 53c0ffc..0000000 --- a/docs/assets/NameRules.html.2124d233.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-4ea9e766","path":"/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html","title":"NameRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"String.isSynthetic - i-ext-method","slug":"string-issynthetic-i-ext-method","link":"#string-issynthetic-i-ext-method","children":[]},{"level":2,"title":"String.isOnlySymbols - i-ext-method","slug":"string-isonlysymbols-i-ext-method","link":"#string-isonlysymbols-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLetters - i-ext-method","slug":"string-isonlyletters-i-ext-method","link":"#string-isonlyletters-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyNumbers - i-ext-method","slug":"string-isonlynumbers-i-ext-method","link":"#string-isonlynumbers-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLettersNumbers - i-ext-method","slug":"string-isonlylettersnumbers-i-ext-method","link":"#string-isonlylettersnumbers-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLowercase - i-ext-method","slug":"string-isonlylowercase-i-ext-method","link":"#string-isonlylowercase-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyUppercase - i-ext-method","slug":"string-isonlyuppercase-i-ext-method","link":"#string-isonlyuppercase-i-ext-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md"}');export{e as data}; diff --git a/docs/assets/NameRules.html.538d5551.js b/docs/assets/NameRules.html.538d5551.js deleted file mode 100644 index e9c0825..0000000 --- a/docs/assets/NameRules.html.538d5551.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-264e7384","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html","title":"NameRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"String.isSynthetic - i-ext-method","slug":"string-issynthetic-i-ext-method","link":"#string-issynthetic-i-ext-method","children":[]},{"level":2,"title":"String.isOnlySymbols - i-ext-method","slug":"string-isonlysymbols-i-ext-method","link":"#string-isonlysymbols-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLetters - i-ext-method","slug":"string-isonlyletters-i-ext-method","link":"#string-isonlyletters-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyNumbers - i-ext-method","slug":"string-isonlynumbers-i-ext-method","link":"#string-isonlynumbers-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLettersNumbers - i-ext-method","slug":"string-isonlylettersnumbers-i-ext-method","link":"#string-isonlylettersnumbers-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyLowercase - i-ext-method","slug":"string-isonlylowercase-i-ext-method","link":"#string-isonlylowercase-i-ext-method","children":[]},{"level":2,"title":"String.isOnlyUppercase - i-ext-method","slug":"string-isonlyuppercase-i-ext-method","link":"#string-isonlyuppercase-i-ext-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md"}');export{e as data}; diff --git a/docs/assets/NameRules.html.5824cbcd.js b/docs/assets/NameRules.html.5824cbcd.js deleted file mode 100644 index c1505af..0000000 --- a/docs/assets/NameRules.html.5824cbcd.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o as e,c as n,a as o}from"./app.2add9aa5.js";const a={},t=o(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

NameRules - class

class NameRules private constructor()
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u540D\u79F0\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

String.isSynthetic - i-ext-method

fun String.isSynthetic(index: Int): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u4E3A\u533F\u540D\u7C7B\u7684\u4E3B\u7C7B\u8C03\u7528\u5BF9\u8C61\u3002

String.isOnlySymbols - i-ext-method

fun String.isOnlySymbols(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u7B26\u53F7\u3002

String.isOnlyLetters - i-ext-method

fun String.isOnlyLetters(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u5B57\u6BCD\u3002

String.isOnlyNumbers - i-ext-method

fun String.isOnlyNumbers(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u6570\u5B57\u3002

String.isOnlyLettersNumbers - i-ext-method

fun String.isOnlyLettersNumbers(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u5B57\u6BCD\u6216\u6570\u5B57\u3002

String.isOnlyLowercase - i-ext-method

fun String.isOnlyLowercase(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u5C0F\u5199\u5B57\u6BCD\u3002

\u5728\u6CA1\u6709\u5176\u5B83\u6761\u4EF6\u7684\u60C5\u51B5\u4E0B\u8BBE\u7F6E\u6B64\u6761\u4EF6\u5141\u8BB8\u5224\u65AD\u5BF9\u8C61\u5B58\u5728\u5B57\u6BCD\u4EE5\u5916\u7684\u5B57\u7B26\u3002

String.isOnlyUppercase - i-ext-method

fun String.isOnlyUppercase(): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u53EA\u6709\u5927\u5199\u5B57\u6BCD\u3002

\u5728\u6CA1\u6709\u5176\u5B83\u6761\u4EF6\u7684\u60C5\u51B5\u4E0B\u8BBE\u7F6E\u6B64\u6761\u4EF6\u5141\u8BB8\u5224\u65AD\u5BF9\u8C61\u5B58\u5728\u5B57\u6BCD\u4EE5\u5916\u7684\u5B57\u7B26\u3002

`,52),l=[t];function p(r,c){return e(),n("div",null,l)}const d=s(a,[["render",p],["__file","NameRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/NameRules.html.6db86216.js b/docs/assets/NameRules.html.6db86216.js deleted file mode 100644 index 985e6c7..0000000 --- a/docs/assets/NameRules.html.6db86216.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o as e,c as n,a as o}from"./app.2add9aa5.js";const a={},l=o(`

NameRules - class

class NameRules private constructor()
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u6A21\u7CCA Class\u3001Member \u540D\u79F0\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

String.isSynthetic - i-ext-method

fun String.isSynthetic(index: Int): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u4E3A\u533F\u540D\u7C7B\u7684\u4E3B\u7C7B\u8C03\u7528\u5BF9\u8C61\u3002

String.isOnlySymbols - i-ext-method

fun String.isOnlySymbols(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u7B26\u53F7\u3002

String.isOnlyLetters - i-ext-method

fun String.isOnlyLetters(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u5B57\u6BCD\u3002

String.isOnlyNumbers - i-ext-method

fun String.isOnlyNumbers(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u6570\u5B57\u3002

String.isOnlyLettersNumbers - i-ext-method

fun String.isOnlyLettersNumbers(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u5B57\u6BCD\u6216\u6570\u5B57\u3002

String.isOnlyLowercase - i-ext-method

fun String.isOnlyLowercase(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u5C0F\u5199\u5B57\u6BCD\u3002

\u5728\u6CA1\u6709\u5176\u5B83\u6761\u4EF6\u7684\u60C5\u51B5\u4E0B\u8BBE\u7F6E\u6B64\u6761\u4EF6\u5141\u8BB8\u5224\u65AD\u5BF9\u8C61\u5B58\u5728\u5B57\u6BCD\u4EE5\u5916\u7684\u5B57\u7B26\u3002

String.isOnlyUppercase - i-ext-method

fun String.isOnlyUppercase(): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u53EA\u6709\u5927\u5199\u5B57\u6BCD\u3002

\u5728\u6CA1\u6709\u5176\u5B83\u6761\u4EF6\u7684\u60C5\u51B5\u4E0B\u8BBE\u7F6E\u6B64\u6761\u4EF6\u5141\u8BB8\u5224\u65AD\u5BF9\u8C61\u5B58\u5728\u5B57\u6BCD\u4EE5\u5916\u7684\u5B57\u7B26\u3002

`,51),t=[l];function p(c,r){return e(),n("div",null,t)}const d=s(a,[["render",p],["__file","NameRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/ObjectRules.html.0a6223eb.js b/docs/assets/ObjectRules.html.0a6223eb.js deleted file mode 100644 index 3596377..0000000 --- a/docs/assets/ObjectRules.html.0a6223eb.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3045c7fe","path":"/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html","title":"ObjectRules - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md"}');export{e as data}; diff --git a/docs/assets/ObjectRules.html.2373dc72.js b/docs/assets/ObjectRules.html.2373dc72.js deleted file mode 100644 index 4960953..0000000 --- a/docs/assets/ObjectRules.html.2373dc72.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const l={},n=a(`

ObjectRules - class

class ObjectRules private constructor(private val instance: Any)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u4EFB\u610F\u5BF9\u8C61\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

`,7),c=[n];function t(p,r){return e(),o("div",null,c)}const i=s(l,[["render",t],["__file","ObjectRules.html.vue"]]);export{i as default}; diff --git a/docs/assets/ObjectRules.html.e6691926.js b/docs/assets/ObjectRules.html.e6691926.js deleted file mode 100644 index 73097e6..0000000 --- a/docs/assets/ObjectRules.html.e6691926.js +++ /dev/null @@ -1,2 +0,0 @@ -import{_ as s,o as e,c as o,a}from"./app.2add9aa5.js";const n={},t=a(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ObjectRules - class

class ObjectRules private constructor(private val instance: Any)
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u4EFB\u610F\u5BF9\u8C61\u6761\u4EF6\u5B9E\u73B0\u7C7B\u3002

\u53EF\u5BF9 R8 \u6DF7\u6DC6\u540E\u7684 Class\u3001Member \u8FDB\u884C\u66F4\u52A0\u8BE6\u7EC6\u7684\u5B9A\u4F4D\u3002

`,8),c=[t];function l(r,p){return e(),o("div",null,c)}const d=s(n,[["render",l],["__file","ObjectRules.html.vue"]]);export{d as default}; diff --git a/docs/assets/ObjectRules.html.ec943416.js b/docs/assets/ObjectRules.html.ec943416.js deleted file mode 100644 index ff0e953..0000000 --- a/docs/assets/ObjectRules.html.ec943416.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-b0f7c49c","path":"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html","title":"ObjectRules - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md"}');export{e as data}; diff --git a/docs/assets/ReflectionFactory.html.3a708e8c.js b/docs/assets/ReflectionFactory.html.3a708e8c.js deleted file mode 100644 index 19a3120..0000000 --- a/docs/assets/ReflectionFactory.html.3a708e8c.js +++ /dev/null @@ -1,88 +0,0 @@ -import{_ as s,o as a,c as n,a as l}from"./app.2add9aa5.js";const o={},e=l(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ReflectionFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

ClassLoader.listOfClasses - ext-method

fun ClassLoader.listOfClasses(): List<String>
-

Change Records

v1.0.0 first

Function Illustrate

\u5199\u51FA\u5F53\u524D ClassLoader \u4E0B\u6240\u6709 Class \u540D\u79F0\u6570\u7EC4\u3002

Notice

\u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

\u82E5\u8981\u6309\u6307\u5B9A\u89C4\u5219\u67E5\u627E\u4E00\u4E2A Class\uFF0C\u8BF7\u4F7F\u7528 ClassLoader.searchClass \u65B9\u6CD5\u3002

ClassLoader.searchClass - ext-method

inline fun ClassLoader.searchClass(context: Context?, name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7\u5F53\u524D ClassLoader \u6309\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u5E76\u5F97\u5230 Dex \u4E2D\u7684 Class\u3002

Pay Attention

\u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u53CA\u67E5\u627E\u6761\u4EF6\u590D\u6742\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

\u5EFA\u8BAE\u542F\u7528 async \u6216\u8BBE\u7F6E name \u53C2\u6570\uFF0Cname \u53C2\u6570\u5C06\u5728\u5F53\u524D APP \u4E0D\u540C\u7248\u672C\u4E2D\u81EA\u52A8\u8FDB\u884C\u672C\u5730\u7F13\u5B58\u4EE5\u63D0\u5347\u6548\u7387\u3002

\u5982\u679C\u4F7F\u7528\u4E86 async \u6216 name \u53C2\u6570\uFF0C\u5219\u5FC5\u987B\u586B\u5199 context \u53C2\u6570\u3002

\u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

Class.hasExtends - ext-field

val Class<*>.hasExtends: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u662F\u5426\u6709\u7EE7\u627F\u5173\u7CFB\uFF0C\u7236\u7C7B\u662F Any \u5C06\u88AB\u8BA4\u4E3A\u6CA1\u6709\u7EE7\u627F\u5173\u7CFB\u3002

Class?.extends - ext-method

infix fun Class<*>?.extends(other: Class<*>?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u662F\u5426\u7EE7\u627F\u4E8E other\u3002

\u5982\u679C\u5F53\u524D Class \u5C31\u662F other \u4E5F\u4F1A\u8FD4\u56DE true\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A null \u6216 other \u4E3A null \u4F1A\u8FD4\u56DE false\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u5B58\u5728\u7EE7\u627F\u5173\u7CFB\u3002

The following example

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u7EE7\u627F\u4E8E B
-if (classA extends classB) {
-    // Your code here.
-}
-

Class?.notExtends - ext-method

infix fun Class<*>?.notExtends(other: Class<*>?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u662F\u5426\u4E0D\u7EE7\u627F\u4E8E other\u3002

\u6B64\u65B9\u6CD5\u76F8\u5F53\u4E8E extends \u7684\u53CD\u5411\u5224\u65AD\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u4E0D\u5B58\u5728\u7EE7\u627F\u5173\u7CFB\u3002

The following example

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u4E0D\u7EE7\u627F\u4E8E B
-if (classA notExtends classB) {
-    // Your code here.
-}
-

Class?.implements - ext-method

infix fun Class<*>?.implements(other: Class<*>?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u662F\u5426\u5B9E\u73B0\u4E86 other \u63A5\u53E3\u7C7B\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A null \u6216 other \u4E3A null \u4F1A\u8FD4\u56DE false\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u5B58\u5728\u4F9D\u8D56\u5173\u7CFB\u3002

The following example

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u5B9E\u73B0\u4E86 B \u63A5\u53E3\u7C7B
-if (classA implements classB) {
-    // Your code here.
-}
-

Class?.notImplements - ext-method

infix fun Class<*>?.notImplements(other: Class<*>?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u5F53\u524D Class \u662F\u5426\u672A\u5B9E\u73B0 other \u63A5\u53E3\u7C7B\u3002

\u6B64\u65B9\u6CD5\u76F8\u5F53\u4E8E implements \u7684\u53CD\u5411\u5224\u65AD\u3002

Function Example

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u4E0D\u5B58\u5728\u4F9D\u8D56\u5173\u7CFB\u3002

The following example

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u672A\u5B9E\u73B0 B \u63A5\u53E3\u7C7B
-if (classA notImplements classB) {
-    // Your code here.
-}
-

Class.toJavaPrimitiveType - ext-method

fun Class<*>.toJavaPrimitiveType(): Class<*>
-

Change Records

v1.0.0 first

Function Illustrate

\u81EA\u52A8\u8F6C\u6362\u5F53\u524D Class \u4E3A Java \u539F\u59CB\u7C7B\u578B (Primitive Type)\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A Java \u6216 Kotlin \u57FA\u672C\u7C7B\u578B\u5C06\u81EA\u52A8\u6267\u884C\u7C7B\u578B\u8F6C\u6362\u3002

\u5F53\u524D\u80FD\u591F\u81EA\u52A8\u8F6C\u6362\u7684\u57FA\u672C\u7C7B\u578B\u5982\u4E0B\u3002

String.toClass - ext-method

fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
-
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A loader \u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002

Function Example

\u4F60\u53EF\u4EE5\u76F4\u63A5\u586B\u5199\u4F60\u8981\u67E5\u627E\u7684\u76EE\u6807 Class\uFF0C\u5FC5\u987B\u5728\u9ED8\u8BA4 ClassLoader \u4E0B\u5B58\u5728\u3002

The following example

"com.example.demo.DemoClass".toClass()
-

\u4F60\u8FD8\u53EF\u4EE5\u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader\u3002

The following example

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-"com.example.demo.DemoClass".toClass(customClassLoader)
-

\u4F60\u8FD8\u53EF\u4EE5\u6307\u5B9A Class \u7684\u76EE\u6807\u7C7B\u578B\u3002

The following example

// \u6307\u5B9A\u7684 DemoClass \u5FC5\u987B\u5B58\u5728\u6216\u4E3A\u53EF\u8BBF\u95EE\u7684 stub
-"com.example.demo.DemoClass".toClass<DemoClass>()
-

\u4F60\u8FD8\u53EF\u4EE5\u8BBE\u7F6E\u5728\u83B7\u53D6\u5230\u8FD9\u4E2A Class \u65F6\u662F\u5426\u81EA\u52A8\u6267\u884C\u5176\u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4E0D\u4F1A\u6267\u884C\u3002

The following example

// \u83B7\u53D6\u5E76\u6267\u884C DemoClass \u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757
-"com.example.demo.DemoClass".toClass(initialize = true)
-

\u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757\u5728 Java \u4E2D\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u5B9A\u4E49\u3002

The following example

public class DemoClass {
-
-    static {
-        // \u8FD9\u91CC\u662F\u9759\u6001\u65B9\u6CD5\u5757\u7684\u5185\u5BB9
-    }
-
-    public DemoClass() {
-        // ...
-    }
-}
-

String.toClassOrNull - ext-method

fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
-
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A loader \u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002

\u627E\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

Function Example

\u7528\u6CD5\u8BF7\u53C2\u8003 String.toClass \u65B9\u6CD5\u3002

classOf - method

inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7 T \u5F97\u5230\u5176 Class \u5B9E\u4F8B\u5E76\u8F6C\u6362\u4E3A\u5B9E\u4F53\u7C7B\u3002

Function Example

\u6211\u4EEC\u8981\u83B7\u53D6\u4E00\u4E2A Class \u5728 Kotlin \u4E0B\u4E0D\u901A\u8FC7\u53CD\u5C04\u65F6\u5E94\u8BE5\u8FD9\u6837\u505A\u3002

The following example

DemoClass::class.java
-

\u73B0\u5728\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5 cast \u4E00\u4E2A\u5B9E\u4F8B\u5E76\u83B7\u53D6\u5B83\u7684 Class \u5BF9\u8C61\uFF0C\u5FC5\u987B\u5728\u5F53\u524D ClassLoader \u4E0B\u5B58\u5728\u3002

The following example

classOf<DemoClass>()
-

\u82E5\u76EE\u6807\u5B58\u5728\u7684 Class \u4E3A stub\uFF0C\u901A\u8FC7\u8FD9\u79CD\u65B9\u5F0F\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader\u3002

The following example

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-classOf<DemoClass>(customClassLoader)
-

String.hasClass - ext-method

fun String.hasClass(loader: ClassLoader?): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u4F7F\u7528\u6307\u5B9A\u7684 ClassLoader \u67E5\u627E\u662F\u5426\u5B58\u5728\u3002

Function Example

\u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u4F7F\u7528\u6B64\u65B9\u6CD5\u5224\u65AD\u5B57\u7B26\u4E32\u4E2D\u7684\u7C7B\u662F\u5426\u5B58\u5728\uFF0C\u6548\u679C\u7B49\u540C\u4E8E\u76F4\u63A5\u4F7F\u7528 Class.forName\u3002

The following example

if("com.example.demo.DemoClass".hasClass()) {
-    // Your code here.
-}
-

\u586B\u5165\u65B9\u6CD5\u4E2D\u7684 loader \u53C2\u6570\u53EF\u5224\u65AD\u6307\u5B9A\u7684 ClassLoader \u4E2D\u7684 Class \u662F\u5426\u5B58\u5728\u3002

The following example

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-if("com.example.demo.DemoClass".hasClass(customClassLoader)) {
-    // Your code here.
-}
-

Class.hasField - ext-method

inline fun Class<*>.hasField(initiate: FieldConditions): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002

Class.hasMethod - ext-method

inline fun Class<*>.hasMethod(initiate: MethodConditions): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u65B9\u6CD5\u662F\u5426\u5B58\u5728\u3002

Class.hasConstructor - ext-method

inline fun Class<*>.hasConstructor(initiate: ConstructorConditions): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u6784\u9020\u65B9\u6CD5\u662F\u5426\u5B58\u5728\u3002

Member.hasModifiers - ext-method

inline fun Member.hasModifiers(conditions: ModifierConditions): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E Member \u4E2D\u5339\u914D\u7684\u63CF\u8FF0\u7B26\u3002

Class.hasModifiers - ext-method

inline fun Class<*>.hasModifiers(conditions: ModifierConditions): Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E Class \u4E2D\u5339\u914D\u7684\u63CF\u8FF0\u7B26\u3002

Class.field - ext-method

inline fun Class<*>.field(initiate: FieldConditions): FieldFinder.Result
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u5E76\u5F97\u5230\u53D8\u91CF\u3002

Class.method - ext-method

inline fun Class<*>.method(initiate: MethodConditions): MethodFinder.Result
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u5E76\u5F97\u5230\u65B9\u6CD5\u3002

Class.constructor - ext-method

inline fun Class<*>.constructor(initiate: ConstructorConditions): ConstructorFinder.Result
-

Change Records

v1.0.0 first

Function Illustrate

\u67E5\u627E\u5E76\u5F97\u5230\u6784\u9020\u65B9\u6CD5\u3002

Class.generic - ext-method

fun Class<*>.generic(): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

Class.generic - ext-method

inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

Any.current - ext-method

inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
-
inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

Class.buildOf - ext-method

inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
-
inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
-

Change Records

v1.0.0 first

Function Illustrate

\u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

Class.allMethods - ext-method

inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u65B9\u6CD5\u3002

Class.allConstructors - ext-method

inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u6784\u9020\u65B9\u6CD5\u3002

Class.allFields - ext-method

inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

`,236),p=[e];function t(c,r){return a(),n("div",null,p)}const d=s(o,[["render",t],["__file","ReflectionFactory.html.vue"]]);export{d as default}; diff --git a/docs/assets/ReflectionFactory.html.660311db.js b/docs/assets/ReflectionFactory.html.660311db.js deleted file mode 100644 index bb89977..0000000 --- a/docs/assets/ReflectionFactory.html.660311db.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-728f231c","path":"/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md"}');export{e as data}; diff --git a/docs/assets/ReflectionFactory.html.79e3b099.js b/docs/assets/ReflectionFactory.html.79e3b099.js deleted file mode 100644 index 9428a82..0000000 --- a/docs/assets/ReflectionFactory.html.79e3b099.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-b3841eba","path":"/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html","title":"ReflectionFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"ClassLoader.listOfClasses - ext-method","slug":"classloader-listofclasses-ext-method","link":"#classloader-listofclasses-ext-method","children":[]},{"level":2,"title":"ClassLoader.searchClass - ext-method","slug":"classloader-searchclass-ext-method","link":"#classloader-searchclass-ext-method","children":[]},{"level":2,"title":"Class.hasExtends - ext-field","slug":"class-hasextends-ext-field","link":"#class-hasextends-ext-field","children":[]},{"level":2,"title":"Class?.extends - ext-method","slug":"class-extends-ext-method","link":"#class-extends-ext-method","children":[]},{"level":2,"title":"Class?.notExtends - ext-method","slug":"class-notextends-ext-method","link":"#class-notextends-ext-method","children":[]},{"level":2,"title":"Class?.implements - ext-method","slug":"class-implements-ext-method","link":"#class-implements-ext-method","children":[]},{"level":2,"title":"Class?.notImplements - ext-method","slug":"class-notimplements-ext-method","link":"#class-notimplements-ext-method","children":[]},{"level":2,"title":"Class.toJavaPrimitiveType - ext-method","slug":"class-tojavaprimitivetype-ext-method","link":"#class-tojavaprimitivetype-ext-method","children":[]},{"level":2,"title":"String.toClass - ext-method","slug":"string-toclass-ext-method","link":"#string-toclass-ext-method","children":[]},{"level":2,"title":"String.toClassOrNull - ext-method","slug":"string-toclassornull-ext-method","link":"#string-toclassornull-ext-method","children":[]},{"level":2,"title":"classOf - method","slug":"classof-method","link":"#classof-method","children":[]},{"level":2,"title":"String.hasClass - ext-method","slug":"string-hasclass-ext-method","link":"#string-hasclass-ext-method","children":[]},{"level":2,"title":"Class.hasField - ext-method","slug":"class-hasfield-ext-method","link":"#class-hasfield-ext-method","children":[]},{"level":2,"title":"Class.hasMethod - ext-method","slug":"class-hasmethod-ext-method","link":"#class-hasmethod-ext-method","children":[]},{"level":2,"title":"Class.hasConstructor - ext-method","slug":"class-hasconstructor-ext-method","link":"#class-hasconstructor-ext-method","children":[]},{"level":2,"title":"Member.hasModifiers - ext-method","slug":"member-hasmodifiers-ext-method","link":"#member-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.hasModifiers - ext-method","slug":"class-hasmodifiers-ext-method","link":"#class-hasmodifiers-ext-method","children":[]},{"level":2,"title":"Class.field - ext-method","slug":"class-field-ext-method","link":"#class-field-ext-method","children":[]},{"level":2,"title":"Class.method - ext-method","slug":"class-method-ext-method","link":"#class-method-ext-method","children":[]},{"level":2,"title":"Class.constructor - ext-method","slug":"class-constructor-ext-method","link":"#class-constructor-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method","link":"#class-generic-ext-method","children":[]},{"level":2,"title":"Class.generic - ext-method","slug":"class-generic-ext-method-1","link":"#class-generic-ext-method-1","children":[]},{"level":2,"title":"Any.current - ext-method","slug":"any-current-ext-method","link":"#any-current-ext-method","children":[]},{"level":2,"title":"Class.buildOf - ext-method","slug":"class-buildof-ext-method","link":"#class-buildof-ext-method","children":[]},{"level":2,"title":"Class.allMethods - ext-method","slug":"class-allmethods-ext-method","link":"#class-allmethods-ext-method","children":[]},{"level":2,"title":"Class.allConstructors - ext-method","slug":"class-allconstructors-ext-method","link":"#class-allconstructors-ext-method","children":[]},{"level":2,"title":"Class.allFields - ext-method","slug":"class-allfields-ext-method","link":"#class-allfields-ext-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md"}');export{e as data}; diff --git a/docs/assets/ReflectionFactory.html.faaec016.js b/docs/assets/ReflectionFactory.html.faaec016.js deleted file mode 100644 index c926475..0000000 --- a/docs/assets/ReflectionFactory.html.faaec016.js +++ /dev/null @@ -1,88 +0,0 @@ -import{_ as s,o as a,c as n,a as l}from"./app.2add9aa5.js";const o={},e=l(`

ReflectionFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u81EA\u5B9A\u4E49 Member \u548C Class \u76F8\u5173\u529F\u80FD\u7684\u67E5\u627E\u5339\u914D\u4EE5\u53CA invoke \u7684\u5C01\u88C5\u7C7B\u3002

ClassLoader.listOfClasses - ext-method

fun ClassLoader.listOfClasses(): List<String>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5199\u51FA\u5F53\u524D ClassLoader \u4E0B\u6240\u6709 Class \u540D\u79F0\u6570\u7EC4\u3002

\u6CE8\u610F

\u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

\u82E5\u8981\u6309\u6307\u5B9A\u89C4\u5219\u67E5\u627E\u4E00\u4E2A Class\uFF0C\u8BF7\u4F7F\u7528 ClassLoader.searchClass \u65B9\u6CD5\u3002

ClassLoader.searchClass - ext-method

inline fun ClassLoader.searchClass(context: Context?, name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7\u5F53\u524D ClassLoader \u6309\u6307\u5B9A\u6761\u4EF6\u67E5\u627E\u5E76\u5F97\u5230 Dex \u4E2D\u7684 Class\u3002

\u7279\u522B\u6CE8\u610F

\u6B64\u65B9\u6CD5\u5728 Class \u6570\u91CF\u8FC7\u591A\u53CA\u67E5\u627E\u6761\u4EF6\u590D\u6742\u65F6\u4F1A\u975E\u5E38\u8017\u65F6\u3002

\u5EFA\u8BAE\u542F\u7528 async \u6216\u8BBE\u7F6E name \u53C2\u6570\uFF0Cname \u53C2\u6570\u5C06\u5728\u5F53\u524D APP \u4E0D\u540C\u7248\u672C\u4E2D\u81EA\u52A8\u8FDB\u884C\u672C\u5730\u7F13\u5B58\u4EE5\u63D0\u5347\u6548\u7387\u3002

\u5982\u679C\u4F7F\u7528\u4E86 async \u6216 name \u53C2\u6570\uFF0C\u5219\u5FC5\u987B\u586B\u5199 context \u53C2\u6570\u3002

\u6B64\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u6027\u80FD\u4E0E\u7A33\u5B9A\u6027\u53EF\u80FD\u4ECD\u7136\u5B58\u5728\u95EE\u9898\uFF0C\u4F7F\u7528\u8FC7\u7A0B\u9047\u5230\u95EE\u9898\u8BF7\u5411\u6211\u4EEC\u62A5\u544A\u5E76\u5E2E\u52A9\u6211\u4EEC\u6539\u8FDB\u3002

Class.hasExtends - ext-field

val Class<*>.hasExtends: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u662F\u5426\u6709\u7EE7\u627F\u5173\u7CFB\uFF0C\u7236\u7C7B\u662F Any \u5C06\u88AB\u8BA4\u4E3A\u6CA1\u6709\u7EE7\u627F\u5173\u7CFB\u3002

Class?.extends - ext-method

infix fun Class<*>?.extends(other: Class<*>?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u662F\u5426\u7EE7\u627F\u4E8E other\u3002

\u5982\u679C\u5F53\u524D Class \u5C31\u662F other \u4E5F\u4F1A\u8FD4\u56DE true\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A null \u6216 other \u4E3A null \u4F1A\u8FD4\u56DE false\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u5B58\u5728\u7EE7\u627F\u5173\u7CFB\u3002

\u793A\u4F8B\u5982\u4E0B

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u7EE7\u627F\u4E8E B
-if (classA extends classB) {
-    // Your code here.
-}
-

Class?.notExtends - ext-method

infix fun Class<*>?.notExtends(other: Class<*>?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u662F\u5426\u4E0D\u7EE7\u627F\u4E8E other\u3002

\u6B64\u65B9\u6CD5\u76F8\u5F53\u4E8E extends \u7684\u53CD\u5411\u5224\u65AD\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u4E0D\u5B58\u5728\u7EE7\u627F\u5173\u7CFB\u3002

\u793A\u4F8B\u5982\u4E0B

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u4E0D\u7EE7\u627F\u4E8E B
-if (classA notExtends classB) {
-    // Your code here.
-}
-

Class?.implements - ext-method

infix fun Class<*>?.implements(other: Class<*>?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u662F\u5426\u5B9E\u73B0\u4E86 other \u63A5\u53E3\u7C7B\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A null \u6216 other \u4E3A null \u4F1A\u8FD4\u56DE false\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u5B58\u5728\u4F9D\u8D56\u5173\u7CFB\u3002

\u793A\u4F8B\u5982\u4E0B

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u5B9E\u73B0\u4E86 B \u63A5\u53E3\u7C7B
-if (classA implements classB) {
-    // Your code here.
-}
-

Class?.notImplements - ext-method

infix fun Class<*>?.notImplements(other: Class<*>?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5F53\u524D Class \u662F\u5426\u672A\u5B9E\u73B0 other \u63A5\u53E3\u7C7B\u3002

\u6B64\u65B9\u6CD5\u76F8\u5F53\u4E8E implements \u7684\u53CD\u5411\u5224\u65AD\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u4F7F\u7528\u6B64\u65B9\u6CD5\u6765\u5224\u65AD\u4E24\u4E2A Class \u662F\u5426\u4E0D\u5B58\u5728\u4F9D\u8D56\u5173\u7CFB\u3002

\u793A\u4F8B\u5982\u4E0B

// \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E24\u4E2A Class \u5C31\u662F\u4F60\u9700\u8981\u5224\u65AD\u7684 Class
-val classA: Class<*>?
-val classB: Class<*>?
-// \u5224\u65AD A \u662F\u5426\u672A\u5B9E\u73B0 B \u63A5\u53E3\u7C7B
-if (classA notImplements classB) {
-    // Your code here.
-}
-

Class.toJavaPrimitiveType - ext-method

fun Class<*>.toJavaPrimitiveType(): Class<*>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u81EA\u52A8\u8F6C\u6362\u5F53\u524D Class \u4E3A Java \u539F\u59CB\u7C7B\u578B (Primitive Type)\u3002

\u5982\u679C\u5F53\u524D Class \u4E3A Java \u6216 Kotlin \u57FA\u672C\u7C7B\u578B\u5C06\u81EA\u52A8\u6267\u884C\u7C7B\u578B\u8F6C\u6362\u3002

\u5F53\u524D\u80FD\u591F\u81EA\u52A8\u8F6C\u6362\u7684\u57FA\u672C\u7C7B\u578B\u5982\u4E0B\u3002

String.toClass - ext-method

fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
-
inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A loader \u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u76F4\u63A5\u586B\u5199\u4F60\u8981\u67E5\u627E\u7684\u76EE\u6807 Class\uFF0C\u5FC5\u987B\u5728\u9ED8\u8BA4 ClassLoader \u4E0B\u5B58\u5728\u3002

\u793A\u4F8B\u5982\u4E0B

"com.example.demo.DemoClass".toClass()
-

\u4F60\u8FD8\u53EF\u4EE5\u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader\u3002

\u793A\u4F8B\u5982\u4E0B

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-"com.example.demo.DemoClass".toClass(customClassLoader)
-

\u4F60\u8FD8\u53EF\u4EE5\u6307\u5B9A Class \u7684\u76EE\u6807\u7C7B\u578B\u3002

\u793A\u4F8B\u5982\u4E0B

// \u6307\u5B9A\u7684 DemoClass \u5FC5\u987B\u5B58\u5728\u6216\u4E3A\u53EF\u8BBF\u95EE\u7684 stub
-"com.example.demo.DemoClass".toClass<DemoClass>()
-

\u4F60\u8FD8\u53EF\u4EE5\u8BBE\u7F6E\u5728\u83B7\u53D6\u5230\u8FD9\u4E2A Class \u65F6\u662F\u5426\u81EA\u52A8\u6267\u884C\u5176\u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757\uFF0C\u9ED8\u8BA4\u60C5\u51B5\u4E0B\u4E0D\u4F1A\u6267\u884C\u3002

\u793A\u4F8B\u5982\u4E0B

// \u83B7\u53D6\u5E76\u6267\u884C DemoClass \u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757
-"com.example.demo.DemoClass".toClass(initialize = true)
-

\u9ED8\u8BA4\u7684\u9759\u6001\u65B9\u6CD5\u5757\u5728 Java \u4E2D\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u5B9A\u4E49\u3002

\u793A\u4F8B\u5982\u4E0B

public class DemoClass {
-
-    static {
-        // \u8FD9\u91CC\u662F\u9759\u6001\u65B9\u6CD5\u5757\u7684\u5185\u5BB9
-    }
-
-    public DemoClass() {
-        // ...
-    }
-}
-

String.toClassOrNull - ext-method

fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
-
inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A loader \u4E2D\u7684\u5B9E\u4F53\u7C7B\u3002

\u627E\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

\u529F\u80FD\u793A\u4F8B

\u7528\u6CD5\u8BF7\u53C2\u8003 String.toClass \u65B9\u6CD5\u3002

classOf - method

inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7 T \u5F97\u5230\u5176 Class \u5B9E\u4F8B\u5E76\u8F6C\u6362\u4E3A\u5B9E\u4F53\u7C7B\u3002

\u529F\u80FD\u793A\u4F8B

\u6211\u4EEC\u8981\u83B7\u53D6\u4E00\u4E2A Class \u5728 Kotlin \u4E0B\u4E0D\u901A\u8FC7\u53CD\u5C04\u65F6\u5E94\u8BE5\u8FD9\u6837\u505A\u3002

\u793A\u4F8B\u5982\u4E0B

DemoClass::class.java
-

\u73B0\u5728\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5 cast \u4E00\u4E2A\u5B9E\u4F8B\u5E76\u83B7\u53D6\u5B83\u7684 Class \u5BF9\u8C61\uFF0C\u5FC5\u987B\u5728\u5F53\u524D ClassLoader \u4E0B\u5B58\u5728\u3002

\u793A\u4F8B\u5982\u4E0B

classOf<DemoClass>()
-

\u82E5\u76EE\u6807\u5B58\u5728\u7684 Class \u4E3A stub\uFF0C\u901A\u8FC7\u8FD9\u79CD\u65B9\u5F0F\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader\u3002

\u793A\u4F8B\u5982\u4E0B

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-classOf<DemoClass>(customClassLoader)
-

String.hasClass - ext-method

fun String.hasClass(loader: ClassLoader?): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7\u5B57\u7B26\u4E32\u7C7B\u540D\u4F7F\u7528\u6307\u5B9A\u7684 ClassLoader \u67E5\u627E\u662F\u5426\u5B58\u5728\u3002

\u529F\u80FD\u793A\u4F8B

\u4F60\u53EF\u4EE5\u8F7B\u677E\u7684\u4F7F\u7528\u6B64\u65B9\u6CD5\u5224\u65AD\u5B57\u7B26\u4E32\u4E2D\u7684\u7C7B\u662F\u5426\u5B58\u5728\uFF0C\u6548\u679C\u7B49\u540C\u4E8E\u76F4\u63A5\u4F7F\u7528 Class.forName\u3002

\u793A\u4F8B\u5982\u4E0B

if("com.example.demo.DemoClass".hasClass()) {
-    // Your code here.
-}
-

\u586B\u5165\u65B9\u6CD5\u4E2D\u7684 loader \u53C2\u6570\u53EF\u5224\u65AD\u6307\u5B9A\u7684 ClassLoader \u4E2D\u7684 Class \u662F\u5426\u5B58\u5728\u3002

\u793A\u4F8B\u5982\u4E0B

val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
-if("com.example.demo.DemoClass".hasClass(customClassLoader)) {
-    // Your code here.
-}
-

Class.hasField - ext-method

inline fun Class<*>.hasField(initiate: FieldConditions): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u53D8\u91CF\u662F\u5426\u5B58\u5728\u3002

Class.hasMethod - ext-method

inline fun Class<*>.hasMethod(initiate: MethodConditions): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u65B9\u6CD5\u662F\u5426\u5B58\u5728\u3002

Class.hasConstructor - ext-method

inline fun Class<*>.hasConstructor(initiate: ConstructorConditions): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u6784\u9020\u65B9\u6CD5\u662F\u5426\u5B58\u5728\u3002

Member.hasModifiers - ext-method

inline fun Member.hasModifiers(conditions: ModifierConditions): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E Member \u4E2D\u5339\u914D\u7684\u63CF\u8FF0\u7B26\u3002

Class.hasModifiers - ext-method

inline fun Class<*>.hasModifiers(conditions: ModifierConditions): Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E Class \u4E2D\u5339\u914D\u7684\u63CF\u8FF0\u7B26\u3002

Class.field - ext-method

inline fun Class<*>.field(initiate: FieldConditions): FieldFinder.Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u5E76\u5F97\u5230\u53D8\u91CF\u3002

Class.method - ext-method

inline fun Class<*>.method(initiate: MethodConditions): MethodFinder.Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u5E76\u5F97\u5230\u65B9\u6CD5\u3002

Class.constructor - ext-method

inline fun Class<*>.constructor(initiate: ConstructorConditions): ConstructorFinder.Result
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u67E5\u627E\u5E76\u5F97\u5230\u6784\u9020\u65B9\u6CD5\u3002

Class.generic - ext-method

fun Class<*>.generic(): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

Class.generic - ext-method

inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D Class \u7684\u6CDB\u578B\u7236\u7C7B\u3002

\u5982\u679C\u5F53\u524D\u5B9E\u4F8B\u4E0D\u5B58\u5728\u6CDB\u578B\u5C06\u8FD4\u56DE null\u3002

Any.current - ext-method

inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
-
inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u64CD\u4F5C\u5BF9\u8C61\u3002

Class.buildOf - ext-method

inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
-
inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u901A\u8FC7\u6784\u9020\u65B9\u6CD5\u521B\u5EFA\u65B0\u5B9E\u4F8B\uFF0C\u6307\u5B9A\u7C7B\u578B T \u6216\u4EFB\u610F\u7C7B\u578B Any\u3002

Class.allMethods - ext-method

inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u65B9\u6CD5\u3002

Class.allConstructors - ext-method

inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u6784\u9020\u65B9\u6CD5\u3002

Class.allFields - ext-method

inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u904D\u5386\u5F53\u524D\u7C7B\u4E2D\u7684\u6240\u6709\u53D8\u91CF\u3002

`,235),p=[e];function c(t,r){return a(),n("div",null,p)}const i=s(o,[["render",c],["__file","ReflectionFactory.html.vue"]]);export{i as default}; diff --git a/docs/assets/VariableTypeFactory.html.216c2fbf.js b/docs/assets/VariableTypeFactory.html.216c2fbf.js deleted file mode 100644 index 666ef5e..0000000 --- a/docs/assets/VariableTypeFactory.html.216c2fbf.js +++ /dev/null @@ -1 +0,0 @@ -const a=JSON.parse('{"key":"v-5ad1133e","path":"/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html","title":"VariableTypeFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md"}');export{a as data}; diff --git a/docs/assets/VariableTypeFactory.html.2f75d9b7.js b/docs/assets/VariableTypeFactory.html.2f75d9b7.js deleted file mode 100644 index 9e6bcb0..0000000 --- a/docs/assets/VariableTypeFactory.html.2f75d9b7.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,r as c,o as r,c as n,b as a,d as s,a as l,e}from"./app.2add9aa5.js";const i={},d=l('

VariableTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),p=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),b=e(" \u8FDB\u884C\u67E5\u770B\u3002");function f(y,k){const o=c("ExternalLinkIcon");return r(),n("div",null,[d,a("p",null,[p,a("a",_,[h,s(o)]),b])])}const u=t(i,[["render",f],["__file","VariableTypeFactory.html.vue"]]);export{u as default}; diff --git a/docs/assets/VariableTypeFactory.html.85b2fcf2.js b/docs/assets/VariableTypeFactory.html.85b2fcf2.js deleted file mode 100644 index afd16bf..0000000 --- a/docs/assets/VariableTypeFactory.html.85b2fcf2.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-12f074b0","path":"/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html","title":"VariableTypeFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/VariableTypeFactory.html.a02b32e0.js b/docs/assets/VariableTypeFactory.html.a02b32e0.js deleted file mode 100644 index 106eaff..0000000 --- a/docs/assets/VariableTypeFactory.html.a02b32e0.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,r as n,o as r,c,b as t,d as s,a as i,e}from"./app.2add9aa5.js";const l={},p=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

VariableTypeFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Java \u76F8\u5173\u57FA\u672C\u53D8\u91CF\u7C7B\u578B\u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),d=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/java/VariableTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function f(b,m){const o=n("ExternalLinkIcon");return r(),c("div",null,[p,t("p",null,[d,t("a",h,[_,s(o)]),u])])}const g=a(l,[["render",f],["__file","VariableTypeFactory.html.vue"]]);export{g as default}; diff --git a/docs/assets/VariousClass.html.416446a8.js b/docs/assets/VariousClass.html.416446a8.js deleted file mode 100644 index 7e697d3..0000000 --- a/docs/assets/VariousClass.html.416446a8.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as s,o,c as a,a as n}from"./app.2add9aa5.js";const l={},e=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

VariousClass - class

class VariousClass(private vararg val name: String)
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u4E0D\u786E\u5B9A\u6027 Class \u7C7B\u540D\u88C5\u8F7D\u5668\uFF0C\u901A\u8FC7 name \u88C5\u8F7D Class \u540D\u79F0\u6570\u7EC4\u3002

get - method

fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

\u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

getOrNull - method

fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

\u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

\u5339\u914D\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

`,22),p=[e];function t(c,r){return o(),a("div",null,p)}const i=s(l,[["render",t],["__file","VariousClass.html.vue"]]);export{i as default}; diff --git a/docs/assets/VariousClass.html.66b228e1.js b/docs/assets/VariousClass.html.66b228e1.js deleted file mode 100644 index 5bc3911..0000000 --- a/docs/assets/VariousClass.html.66b228e1.js +++ /dev/null @@ -1,4 +0,0 @@ -import{_ as s,o as a,c as o,a as l}from"./app.2add9aa5.js";const n={},e=l(`

VariousClass - class

class VariousClass(private vararg val name: String)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u4E0D\u786E\u5B9A\u6027 Class \u7C7B\u540D\u88C5\u8F7D\u5668\uFF0C\u901A\u8FC7 name \u88C5\u8F7D Class \u540D\u79F0\u6570\u7EC4\u3002

get - method

fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

\u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

getOrNull - method

fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5339\u914D\u7684\u5B9E\u4F53\u7C7B\u3002

\u4F7F\u7528\u5F53\u524D loader \u88C5\u8F7D\u76EE\u6807 Class\u3002

\u5339\u914D\u4E0D\u5230 Class \u4F1A\u8FD4\u56DE null\uFF0C\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u3002

`,21),p=[e];function c(t,r){return a(),o("div",null,p)}const y=s(n,[["render",c],["__file","VariousClass.html.vue"]]);export{y as default}; diff --git a/docs/assets/VariousClass.html.7a95c6f9.js b/docs/assets/VariousClass.html.7a95c6f9.js deleted file mode 100644 index b9864d6..0000000 --- a/docs/assets/VariousClass.html.7a95c6f9.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c234ac1e","path":"/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html","title":"VariousClass - class","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"getOrNull - method","slug":"getornull-method","link":"#getornull-method","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.md"}');export{e as data}; diff --git a/docs/assets/VariousClass.html.be531e78.js b/docs/assets/VariousClass.html.be531e78.js deleted file mode 100644 index 786ed93..0000000 --- a/docs/assets/VariousClass.html.be531e78.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3a8666c0","path":"/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html","title":"VariousClass - class","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"get - method","slug":"get-method","link":"#get-method","children":[]},{"level":2,"title":"getOrNull - method","slug":"getornull-method","link":"#getornull-method","children":[]}],"git":{"updatedTime":1674726569000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/bean/VariousClass.md"}');export{e as data}; diff --git a/docs/assets/ViewTypeFactory.html.1609776e.js b/docs/assets/ViewTypeFactory.html.1609776e.js deleted file mode 100644 index fa06299..0000000 --- a/docs/assets/ViewTypeFactory.html.1609776e.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as c,r as a,o as n,c as r,b as o,d as s,a as i,e}from"./app.2add9aa5.js";const d={},l=i('

ViewTypeFactory - kt

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',5),p=e("\u8BE6\u60C5\u53EF "),_={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},h=e("\u70B9\u51FB\u8FD9\u91CC"),f=e(" \u8FDB\u884C\u67E5\u770B\u3002");function y(k,m){const t=a("ExternalLinkIcon");return n(),r("div",null,[l,o("p",null,[p,o("a",_,[h,s(t)]),f])])}const b=c(d,[["render",y],["__file","ViewTypeFactory.html.vue"]]);export{b as default}; diff --git a/docs/assets/ViewTypeFactory.html.419f7049.js b/docs/assets/ViewTypeFactory.html.419f7049.js deleted file mode 100644 index 56230e9..0000000 --- a/docs/assets/ViewTypeFactory.html.419f7049.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-12826b1f","path":"/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html","title":"ViewTypeFactory - kt","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/ViewTypeFactory.html.4f37f6c4.js b/docs/assets/ViewTypeFactory.html.4f37f6c4.js deleted file mode 100644 index 3f96ad4..0000000 --- a/docs/assets/ViewTypeFactory.html.4f37f6c4.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as n,r as a,o as c,c as r,b as t,d as s,a as i,e}from"./app.2add9aa5.js";const l={},d=i('

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

ViewTypeFactory - kt

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u9884\u7F6E\u53CD\u5C04\u7C7B\u578B\u7684\u5E38\u91CF\u7C7B\uFF0C\u4E3B\u8981\u4E3A Android \u76F8\u5173 Widget \u7684 Class \u5185\u5BB9\uFF0C\u8DDF\u968F\u7248\u672C\u66F4\u65B0\u4F1A\u9010\u4E00\u8FDB\u884C\u589E\u52A0\u3002

',6),p=e("\u8BE6\u60C5\u53EF "),h={href:"https://github.com/fankes/YukiReflection/blob/master/yukireflection/src/main/java/com/highcapable/yukireflection/type/android/ViewTypeFactory.kt",target:"_blank",rel:"noopener noreferrer"},_=e("\u70B9\u51FB\u8FD9\u91CC"),u=e(" \u8FDB\u884C\u67E5\u770B\u3002");function f(m,y){const o=a("ExternalLinkIcon");return c(),r("div",null,[d,t("p",null,[p,t("a",h,[_,s(o)]),u])])}const k=n(l,[["render",f],["__file","ViewTypeFactory.html.vue"]]);export{k as default}; diff --git a/docs/assets/ViewTypeFactory.html.fd43bb20.js b/docs/assets/ViewTypeFactory.html.fd43bb20.js deleted file mode 100644 index 6e5bf9c..0000000 --- a/docs/assets/ViewTypeFactory.html.fd43bb20.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-be0e3220","path":"/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html","title":"ViewTypeFactory - kt","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[],"git":{"updatedTime":1683882215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md"}');export{e as data}; diff --git a/docs/assets/YukiReflection.html.071d5ea0.js b/docs/assets/YukiReflection.html.071d5ea0.js deleted file mode 100644 index b93a34a..0000000 --- a/docs/assets/YukiReflection.html.071d5ea0.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-23f4d2be","path":"/en/api/public/com/highcapable/yukireflection/YukiReflection.html","title":"YukiReflection - object","lang":"en-US","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugTag - field","slug":"debugtag-field","link":"#debugtag-field","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isAllowPrintingLogs - field","slug":"isallowprintinglogs-field","link":"#isallowprintinglogs-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]}],"git":{"updatedTime":1682370215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/public/com/highcapable/yukireflection/YukiReflection.md"}');export{e as data}; diff --git a/docs/assets/YukiReflection.html.6e790ebd.js b/docs/assets/YukiReflection.html.6e790ebd.js deleted file mode 100644 index bea897b..0000000 --- a/docs/assets/YukiReflection.html.6e790ebd.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o,c as e,a as n}from"./app.2add9aa5.js";const a={},l=n(`

YukiReflection - object

object YukiReflection
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F YukiReflection \u7684\u88C5\u8F7D\u8C03\u7528\u7C7B\u3002

API_VERSION_NAME - field

const val API_VERSION_NAME: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D YukiReflection \u7684\u7248\u672C\u3002

API_VERSION_CODE - field

const val API_VERSION_CODE: Int
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u83B7\u53D6\u5F53\u524D YukiReflection \u7684\u7248\u672C\u53F7\u3002

Configs - object

object Configs
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5BF9 API \u76F8\u5173\u529F\u80FD\u7684\u914D\u7F6E\u7C7B\u3002

debugTag - field

var debugTag: String
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u8FD9\u662F\u4E00\u4E2A\u8C03\u8BD5\u65E5\u5FD7\u7684\u5168\u5C40\u6807\u8BC6\u3002

\u9ED8\u8BA4\u6587\u6848\u4E3A YukiReflection\u3002

\u4F60\u53EF\u4EE5\u4FEE\u6539\u4E3A\u4F60\u81EA\u5DF1\u7684\u6587\u6848\u3002

isDebug - field

var isDebug: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u542F\u7528 Debug \u6A21\u5F0F\u3002

\u9ED8\u8BA4\u4E0D\u542F\u7528\uFF0C\u542F\u7528\u540E\u5C06\u4EA4\u7531\u65E5\u5FD7\u8F93\u51FA\u7BA1\u7406\u5668\u6253\u5370\u8BE6\u7EC6\u65E5\u5FD7 (\u4F8B\u5982\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u7684\u8017\u65F6) \u5230\u63A7\u5236\u53F0\u3002

\u8BF7\u8FC7\u6EE4 debugTag \u5373\u53EF\u627E\u5230\u6BCF\u6761\u65E5\u5FD7\u3002

isAllowPrintingLogs - field

var isAllowPrintingLogs: Boolean
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u662F\u5426\u542F\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD\u3002

\u6CE8\u610F

\u5173\u95ED\u540E\u5C06\u4F1A\u505C\u7528 YukiReflection \u5BF9\u5168\u90E8\u65E5\u5FD7\u7684\u8F93\u51FA\u3002

isEnableMemberCache - field

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

v1.0.2 \u4F5C\u5E9F

Member \u7684\u76F4\u63A5\u7F13\u5B58\u529F\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u56E0\u4E3A\u5176\u5B58\u5728\u5185\u5B58\u6EA2\u51FA (OOM) \u95EE\u9898

configs - method

inline fun configs(initiate: Configs.() -> Unit)
-

\u53D8\u66F4\u8BB0\u5F55

v1.0.0 \u6DFB\u52A0

\u529F\u80FD\u63CF\u8FF0

\u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

`,59),c=[l];function p(t,r){return o(),e("div",null,c)}const d=s(a,[["render",p],["__file","YukiReflection.html.vue"]]);export{d as default}; diff --git a/docs/assets/YukiReflection.html.787cb57f.js b/docs/assets/YukiReflection.html.787cb57f.js deleted file mode 100644 index cd74156..0000000 --- a/docs/assets/YukiReflection.html.787cb57f.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c088ede0","path":"/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html","title":"YukiReflection - object","lang":"zh-CN","frontmatter":{"pageClass":"code-page"},"excerpt":"","headers":[{"level":2,"title":"API_VERSION_NAME - field","slug":"api-version-name-field","link":"#api-version-name-field","children":[]},{"level":2,"title":"API_VERSION_CODE - field","slug":"api-version-code-field","link":"#api-version-code-field","children":[]},{"level":2,"title":"Configs - object","slug":"configs-object","link":"#configs-object","children":[{"level":3,"title":"debugTag - field","slug":"debugtag-field","link":"#debugtag-field","children":[]},{"level":3,"title":"isDebug - field","slug":"isdebug-field","link":"#isdebug-field","children":[]},{"level":3,"title":"isAllowPrintingLogs - field","slug":"isallowprintinglogs-field","link":"#isallowprintinglogs-field","children":[]}]},{"level":2,"title":"configs - method","slug":"configs-method","link":"#configs-method","children":[]}],"git":{"updatedTime":1682370215000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.md"}');export{e as data}; diff --git a/docs/assets/YukiReflection.html.9b18a061.js b/docs/assets/YukiReflection.html.9b18a061.js deleted file mode 100644 index cf749b2..0000000 --- a/docs/assets/YukiReflection.html.9b18a061.js +++ /dev/null @@ -1,9 +0,0 @@ -import{_ as s,o as e,c as o,a as n}from"./app.2add9aa5.js";const a={},l=n(`

Notice

The English translation of this page has not been completed, you are welcome to contribute translations to us.

You can use the Chrome Translation Plugin to translate entire pages for reference.

YukiReflection - object

object YukiReflection
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F YukiReflection \u7684\u88C5\u8F7D\u8C03\u7528\u7C7B\u3002

API_VERSION_NAME - field

const val API_VERSION_NAME: String
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u53D6\u5F53\u524D YukiReflection \u7684\u7248\u672C\u3002

API_VERSION_CODE - field

const val API_VERSION_CODE: Int
-

Change Records

v1.0.0 first

Function Illustrate

\u83B7\u53D6\u5F53\u524D YukiReflection \u7684\u7248\u672C\u53F7\u3002

Configs - object

object Configs
-

Change Records

v1.0.0 first

Function Illustrate

\u5BF9 API \u76F8\u5173\u529F\u80FD\u7684\u914D\u7F6E\u7C7B\u3002

debugTag - field

var debugTag: String
-

Change Records

v1.0.0 first

Function Illustrate

\u8FD9\u662F\u4E00\u4E2A\u8C03\u8BD5\u65E5\u5FD7\u7684\u5168\u5C40\u6807\u8BC6\u3002

\u9ED8\u8BA4\u6587\u6848\u4E3A YukiReflection\u3002

\u4F60\u53EF\u4EE5\u4FEE\u6539\u4E3A\u4F60\u81EA\u5DF1\u7684\u6587\u6848\u3002

isDebug - field

var isDebug: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u542F\u7528 Debug \u6A21\u5F0F\u3002

\u9ED8\u8BA4\u4E0D\u542F\u7528\uFF0C\u542F\u7528\u540E\u5C06\u4EA4\u7531\u65E5\u5FD7\u8F93\u51FA\u7BA1\u7406\u5668\u6253\u5370\u8BE6\u7EC6\u65E5\u5FD7 (\u4F8B\u5982\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u7684\u8017\u65F6) \u5230\u63A7\u5236\u53F0\u3002

\u8BF7\u8FC7\u6EE4 debugTag \u5373\u53EF\u627E\u5230\u6BCF\u6761\u65E5\u5FD7\u3002

isAllowPrintingLogs - field

var isAllowPrintingLogs: Boolean
-

Change Records

v1.0.0 first

Function Illustrate

\u662F\u5426\u542F\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD\u3002

Notice

\u5173\u95ED\u540E\u5C06\u4F1A\u505C\u7528 YukiReflection \u5BF9\u5168\u90E8\u65E5\u5FD7\u7684\u8F93\u51FA\u3002

isEnableMemberCache - field

Change Records

v1.0.0 first

v1.0.2 deprecated

Member \u7684\u76F4\u63A5\u7F13\u5B58\u529F\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u56E0\u4E3A\u5176\u5B58\u5728\u5185\u5B58\u6EA2\u51FA (OOM) \u95EE\u9898

configs - method

inline fun configs(initiate: Configs.() -> Unit)
-

Change Records

v1.0.0 first

Function Illustrate

\u5BF9 Configs \u7C7B\u5B9E\u73B0\u4E86\u4E00\u4E2A lambda \u65B9\u6CD5\u4F53\u3002

\u4F60\u53EF\u4EE5\u8F7B\u677E\u5730\u8C03\u7528\u5B83\u8FDB\u884C\u914D\u7F6E\u3002

`,60),c=[l];function t(p,r){return e(),o("div",null,c)}const d=s(a,[["render",t],["__file","YukiReflection.html.vue"]]);export{d as default}; diff --git a/docs/assets/about.html.2effd4b1.js b/docs/assets/about.html.2effd4b1.js deleted file mode 100644 index 23a2dce..0000000 --- a/docs/assets/about.html.2effd4b1.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-7a15fe3b","path":"/en/about/about.html","title":"About this Document","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"License","slug":"license","link":"#license","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/about/about.md"}');export{e as data}; diff --git a/docs/assets/about.html.94009ddf.js b/docs/assets/about.html.94009ddf.js deleted file mode 100644 index 36c5491..0000000 --- a/docs/assets/about.html.94009ddf.js +++ /dev/null @@ -1,22 +0,0 @@ -import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.2add9aa5.js";const i={},r=s("h1",{id:"about-this-document",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#about-this-document","aria-hidden":"true"},"#"),a(" About this Document")],-1),d=a("This document is powered by "),h={href:"https://v2.vuepress.vuejs.org/en",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a("."),u=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),I={href:"https://github.com/fankes/YukiReflection/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},E=a("The MIT License (MIT)"),O=p(`
MIT License
-
-Copyright (C) 2019-2023 HighCapable
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-

Copyright \xA9 2019-2023 HighCapable

`,2);function N(R,_){const n=t("ExternalLinkIcon");return l(),c("div",null,[r,s("blockquote",null,[s("p",null,[d,s("a",h,[b,e(n)]),T])]),u,s("p",null,[s("a",I,[E,e(n)])]),O])}const f=o(i,[["render",N],["__file","about.html.vue"]]);export{f as default}; diff --git a/docs/assets/about.html.b758f732.js b/docs/assets/about.html.b758f732.js deleted file mode 100644 index 73e4754..0000000 --- a/docs/assets/about.html.b758f732.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-41967128","path":"/zh-cn/about/about.html","title":"\u5173\u4E8E\u6B64\u6587\u6863","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"License","slug":"license","link":"#license","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/about/about.md"}');export{e as data}; diff --git a/docs/assets/about.html.c8884850.js b/docs/assets/about.html.c8884850.js deleted file mode 100644 index 3f1c317..0000000 --- a/docs/assets/about.html.c8884850.js +++ /dev/null @@ -1,22 +0,0 @@ -import{_ as o,r as t,o as l,c,b as s,d as e,e as a,a as p}from"./app.2add9aa5.js";const i={},r=s("h1",{id:"\u5173\u4E8E\u6B64\u6587\u6863",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#\u5173\u4E8E\u6B64\u6587\u6863","aria-hidden":"true"},"#"),a(" \u5173\u4E8E\u6B64\u6587\u6863")],-1),d=a("\u6B64\u6587\u6863\u7531 "),h={href:"https://v2.vuepress.vuejs.org/zh",target:"_blank",rel:"noopener noreferrer"},b=a("VuePress"),T=a(" \u5F3A\u529B\u9A71\u52A8\u3002"),I=s("h2",{id:"license",tabindex:"-1"},[s("a",{class:"header-anchor",href:"#license","aria-hidden":"true"},"#"),a(" License")],-1),E={href:"https://github.com/fankes/YukiReflection/blob/master/LICENSE",target:"_blank",rel:"noopener noreferrer"},u=a("The MIT License (MIT)"),O=p(`
MIT License
-
-Copyright (C) 2019-2023 HighCapable
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-

\u7248\u6743\u6240\u6709 \xA9 2019-2023 HighCapable

`,2);function N(R,_){const n=t("ExternalLinkIcon");return l(),c("div",null,[r,s("blockquote",null,[s("p",null,[d,s("a",h,[b,e(n)]),T])]),I,s("p",null,[s("a",E,[u,e(n)])]),O])}const y=o(i,[["render",N],["__file","about.html.vue"]]);export{y as default}; diff --git a/docs/assets/api-example.html.4692aae4.js b/docs/assets/api-example.html.4692aae4.js deleted file mode 100644 index 9bda7cf..0000000 --- a/docs/assets/api-example.html.4692aae4.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as s,o as n,c as a,a as e}from"./app.2add9aa5.js";const l={},o=e(`

API \u57FA\u672C\u914D\u7F6E

\u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiReflection \u7684\u57FA\u672C\u914D\u7F6E\u65B9\u6CD5\u3002

YukiReflection \u65E0\u9700\u4E00\u4E9B\u590D\u6742\u7684\u914D\u7F6E\u5373\u53EF\u76F4\u63A5\u5F00\u59CB\u4F7F\u7528\uFF0C\u4E14\u4E0D\u4F1A\u4E0E Java \u539F\u751F\u7684\u53CD\u5C04 API \u51B2\u7A81\u3002

\u4F60\u53EF\u4EE5\u5728\u4F7F\u7528\u4E4B\u524D\u5BF9 YukiReflection \u8FDB\u884C\u4E00\u4E9B\u529F\u80FD\u914D\u7F6E\u3002

\u83B7\u53D6 API \u7248\u672C

\u4F60\u53EF\u4EE5\u901A\u8FC7\u5982\u4E0B\u65B9\u5F0F\u83B7\u53D6\u5F53\u524D YukiReflection \u7684 API \u7248\u672C\u3002

\u793A\u4F8B\u5982\u4E0B

// \u83B7\u53D6\u7248\u672C\u540D\u79F0
-val versionName = YukiReflection.API_VERSION_NAME
-// \u83B7\u53D6\u7248\u672C\u53F7
-val versionCode = YukiReflection.API_VERSION_CODE
-

\u4F60\u53EF\u4EE5\u901A\u8FC7\u83B7\u53D6\u7248\u672C\u8FDB\u884C\u4E00\u4E9B\u4E0D\u540C\u7248\u672C\u5DEE\u5F02\u7684\u5224\u65AD\u6216\u7528\u4E8E\u663E\u793A\u5728\u5173\u4E8E\u4FE1\u606F\u4E2D\u3002

\u5C0F\u63D0\u793A

\u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 YukiReflection\u3002

\u914D\u7F6E API \u76F8\u5173\u529F\u80FD

\u4F60\u53EF\u4EE5\u901A\u8FC7 YukiReflection.configs { ... } \u65B9\u6CD5\u6216 YukiReflection.Configs \u6765\u914D\u7F6E\u76F8\u5173\u529F\u80FD\u3002

\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E

\u4F60\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u6765\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u7684\u6807\u7B7E\u3002

API \u5185\u90E8\u7684\u65E5\u5FD7\u5C06\u4F1A\u4F7F\u7528\u6B64\u6807\u7B7E\u8FDB\u884C\u6253\u5370\u3002

\u793A\u4F8B\u5982\u4E0B

// \u901A\u8FC7 configs \u65B9\u6CD5
-YukiReflection.configs {
-    debugTag = "YourCustomTag"
-}
-// \u76F4\u63A5\u8BBE\u7F6E
-YukiReflection.Configs.debugTag = "YourCustomTag"
-

\u542F\u7528\u6216\u7981\u7528 Debug \u6A21\u5F0F

\u4F60\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u6765\u542F\u7528\u6216\u7981\u7528 Debug \u6A21\u5F0F\u3002

Debug \u6A21\u5F0F\u9ED8\u8BA4\u662F\u5173\u95ED\u7684\uFF0C\u542F\u7528\u540E\u5C06\u4F1A\u6253\u5370\u8BE6\u7EC6\u65E5\u5FD7 (\u4F8B\u5982\u53CD\u5C04\u67E5\u627E\u529F\u80FD\u7684\u8017\u65F6) \u5230\u63A7\u5236\u53F0\u3002

\u793A\u4F8B\u5982\u4E0B

// \u901A\u8FC7 configs \u65B9\u6CD5
-YukiReflection.configs {
-    isDebug = true
-}
-// \u76F4\u63A5\u8BBE\u7F6E
-YukiReflection.Configs.isDebug = true
-

\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD

\u4F60\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u6765\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD\u3002

\u6B64\u529F\u80FD\u9ED8\u8BA4\u542F\u7528\uFF0C\u5173\u95ED\u540E\u5C06\u4F1A\u505C\u7528 YukiReflection \u5BF9\u5168\u90E8\u65E5\u5FD7\u7684\u8F93\u51FA\u3002

\u793A\u4F8B\u5982\u4E0B

// \u901A\u8FC7 configs \u65B9\u6CD5
-YukiReflection.configs {
-    isAllowPrintingLogs = true
-}
-// \u76F4\u63A5\u8BBE\u7F6E
-YukiReflection.Configs.isAllowPrintingLogs = true
-

\u4F7F\u7528 configs \u65B9\u6CD5\u914D\u7F6E

\u4E3A\u4E86\u4E00\u6B21\u6027\u914D\u7F6E\u591A\u4E2A\u529F\u80FD\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 YukiReflection.configs { ... } \u65B9\u6CD5\u8FDB\u884C\u914D\u7F6E\u3002

\u793A\u4F8B\u5982\u4E0B

YukiReflection.configs {
-    debugTag = "YourCustomTag"
-    isDebug = true
-    isAllowPrintingLogs = true
-}
-

\u5C0F\u63D0\u793A

\u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 YukiReflection.configs \u65B9\u6CD5\u3001YukiReflection.Configs\u3002

`,32),i=[o];function p(c,r){return n(),a("div",null,i)}const d=s(l,[["render",p],["__file","api-example.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-example.html.6daf2d5c.js b/docs/assets/api-example.html.6daf2d5c.js deleted file mode 100644 index 7caaa7c..0000000 --- a/docs/assets/api-example.html.6daf2d5c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-9cfea7fc","path":"/en/config/api-example.html","title":"API Basic Configs","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Get the API Version","slug":"get-the-api-version","link":"#get-the-api-version","children":[]},{"level":2,"title":"Configure API Related Functions","slug":"configure-api-related-functions","link":"#configure-api-related-functions","children":[{"level":3,"title":"Custom Debug Log Tag","slug":"custom-debug-log-tag","link":"#custom-debug-log-tag","children":[]},{"level":3,"title":"Enable or Disable Debug Mode","slug":"enable-or-disable-debug-mode","link":"#enable-or-disable-debug-mode","children":[]},{"level":3,"title":"Enable or Disable Debug Logs","slug":"enable-or-disable-debug-logs","link":"#enable-or-disable-debug-logs","children":[]},{"level":3,"title":"Use the configs Method to Configure","slug":"use-the-configs-method-to-configure","link":"#use-the-configs-method-to-configure","children":[]}]}],"git":{"updatedTime":1682370755000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/config/api-example.md"}');export{e as data}; diff --git a/docs/assets/api-example.html.90859470.js b/docs/assets/api-example.html.90859470.js deleted file mode 100644 index 76c9108..0000000 --- a/docs/assets/api-example.html.90859470.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c6114c9e","path":"/zh-cn/config/api-example.html","title":"API \u57FA\u672C\u914D\u7F6E","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u83B7\u53D6 API \u7248\u672C","slug":"\u83B7\u53D6-api-\u7248\u672C","link":"#\u83B7\u53D6-api-\u7248\u672C","children":[]},{"level":2,"title":"\u914D\u7F6E API \u76F8\u5173\u529F\u80FD","slug":"\u914D\u7F6E-api-\u76F8\u5173\u529F\u80FD","link":"#\u914D\u7F6E-api-\u76F8\u5173\u529F\u80FD","children":[{"level":3,"title":"\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E","slug":"\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E","link":"#\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E","children":[]},{"level":3,"title":"\u542F\u7528\u6216\u7981\u7528 Debug \u6A21\u5F0F","slug":"\u542F\u7528\u6216\u7981\u7528-debug-\u6A21\u5F0F","link":"#\u542F\u7528\u6216\u7981\u7528-debug-\u6A21\u5F0F","children":[]},{"level":3,"title":"\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD","slug":"\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD","link":"#\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD","children":[]},{"level":3,"title":"\u4F7F\u7528 configs \u65B9\u6CD5\u914D\u7F6E","slug":"\u4F7F\u7528-configs-\u65B9\u6CD5\u914D\u7F6E","link":"#\u4F7F\u7528-configs-\u65B9\u6CD5\u914D\u7F6E","children":[]}]}],"git":{"updatedTime":1682370755000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/config/api-example.md"}');export{e as data}; diff --git a/docs/assets/api-example.html.cc98f2cb.js b/docs/assets/api-example.html.cc98f2cb.js deleted file mode 100644 index 87f31cc..0000000 --- a/docs/assets/api-example.html.cc98f2cb.js +++ /dev/null @@ -1,28 +0,0 @@ -import{_ as e,o as s,c as n,a}from"./app.2add9aa5.js";const o={},l=a(`

API Basic Configs

The basic configuration method of YukiReflection is introduced here.

YukiReflection can be used directly without some complex configuration, and does not conflict with Java's native Reflection API.

You can configure some functions of YukiReflection before using it.

Get the API Version

You can get the current API version of YukiReflection as follows.

The following example

// Get the version name
-val versionName = YukiReflection. API_VERSION_NAME
-// Get the version code
-val versionCode = YukiReflection. API_VERSION_CODE
-

You can judge the difference between different versions or display it in the about information by obtaining the version.

Tips

For more functions, please refer to YukiReflection.

You can configure related functions through YukiReflection.configs { ... } method or YukiReflection.Configs.

Custom Debug Log Tag

You can use the following methods to customize the tag of the debug log.

Logs inside the API will be printed using this tag.

The following example

// Via the configs method
-YukiReflection.configs {
-    debugTag = "YourCustomTag"
-}
-// Set directly
-YukiReflection.Configs.debugTag = "YourCustomTag"
-

Enable or Disable Debug Mode

You can use the following methods to enable or disable Debug mode.

The Debug mode is disabled by default, and when enabled, detailed logs (such as the time spent on the reflective search function) will be printed to the console.

The following example

// Via the configs method
-YukiReflection.configs {
-    isDebug = true
-}
-// Set directly
-YukiReflection.Configs.isDebug = true
-

Enable or Disable Debug Logs

You can use the following methods to enable or disable debug logs.

This function is enabled by default, and disable will stop YukiReflection output all logs.

The following example

// Via the configs method
-YukiReflection.configs {
-    isAllowPrintingLogs = true
-}
-// Set directly
-YukiReflection.Configs.isAllowPrintingLogs = true
-

Use the configs Method to Configure

In order to configure multiple features at once, you can directly use the YukiReflection.configs { ... } method to configure.

The following example

YukiReflection.configs {
-    debugTag = "YourCustomTag"
-    isDebug = true
-    isAllowPrintingLogs = true
-}
-

Tips

For more functions, please refer to YukiReflection.configs method, YukiReflection.Configs.

`,32),i=[l];function c(t,p){return s(),n("div",null,i)}const d=e(o,[["render",c],["__file","api-example.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-exception.html.58702900.js b/docs/assets/api-exception.html.58702900.js deleted file mode 100644 index 351f858..0000000 --- a/docs/assets/api-exception.html.58702900.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-72c12b7d","path":"/en/config/api-exception.html","title":"API Exception Handling","lang":"en-US","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"Non-Blocking Exceptions","slug":"non-blocking-exceptions","link":"#non-blocking-exceptions","children":[]},{"level":2,"title":"Blocking Exceptions","slug":"blocking-exceptions","link":"#blocking-exceptions","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/config/api-exception.md"}');export{e as data}; diff --git a/docs/assets/api-exception.html.67f8bf5e.js b/docs/assets/api-exception.html.67f8bf5e.js deleted file mode 100644 index d353b91..0000000 --- a/docs/assets/api-exception.html.67f8bf5e.js +++ /dev/null @@ -1,86 +0,0 @@ -import{_ as s,o as n,c as e,a}from"./app.2add9aa5.js";const l={},o=a(`

API \u5F02\u5E38\u5904\u7406

\u5F02\u5E38\u662F\u5728\u5F00\u53D1\u8FC7\u7A0B\u7ECF\u5E38\u9047\u5230\u7684\u4E3B\u8981\u95EE\u9898\uFF0C\u8FD9\u91CC\u4ECB\u7ECD\u4E86 YukiReflection \u5728\u4F7F\u7528\u8FC7\u7A0B\u4E2D\u53EF\u80FD\u9047\u5230\u7684\u5E38\u89C1\u5F02\u5E38\u4EE5\u53CA\u5904\u7406\u65B9\u5F0F\u3002

\u8FD9\u91CC\u7684\u5F02\u5E38\u8BF4\u660E\u53EA\u4F1A\u540C\u6B65\u6700\u65B0\u7684 API \u7248\u672C\uFF0C\u8F83\u65E7\u7684 API \u7248\u672C\u7684\u5F02\u5E38\u5C06\u4E0D\u4F1A\u518D\u8FDB\u884C\u8BF4\u660E\uFF0C\u8BF7\u59CB\u7EC8\u4FDD\u6301 API \u7248\u672C\u4E3A\u6700\u65B0\u3002

\u975E\u963B\u65AD\u5F02\u5E38

\u8FD9\u4E9B\u5F02\u5E38\u4E0D\u4F1A\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C (FC)\uFF0C\u4F46\u662F\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370 E \u7EA7\u522B\u7684\u65E5\u5FD7\uFF0C\u4E5F\u53EF\u80FD\u4F1A\u505C\u6B62\u7EE7\u7EED\u6267\u884C\u76F8\u5173\u529F\u80FD\u3002

exception

loggerE

Method/Constructor/Field match type "TYPE" not allowed

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u8BBE\u7F6E\u4E86\u4E0D\u5141\u8BB8\u7684\u53C2\u6570\u7C7B\u578B\u3002

\u793A\u4F8B\u5982\u4E0B

// \u67E5\u627E\u4E00\u4E2A\u65B9\u6CD5
-method {
-    // \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
-    param(false, 1, 0)
-    // \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
-    returnType = false
-}
-
-// \u67E5\u627E\u4E00\u4E2A\u53D8\u91CF
-field {
-    // \u2757\u8BBE\u7F6E\u4E86\u65E0\u6548\u7684\u7C7B\u578B\u4E3E\u4F8B
-    type = false
-}
-

\u89E3\u51B3\u65B9\u6848

\u5728\u67E5\u627E\u4E2D param\u3001returnType\u3001type \u4E2D\u4EC5\u63A5\u53D7 Class\u3001String\u3001VariousClass \u7C7B\u578B\u7684\u4F20\u503C\uFF0C\u4E0D\u53EF\u4F20\u5165\u53C2\u6570\u5B9E\u4F8B\u3002

\u793A\u4F8B\u5982\u4E0B

// \u67E5\u627E\u4E00\u4E2A\u65B9\u6CD5
-method {
-    // \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
-    param(BooleanType, IntType, IntType)
-    // \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
-    returnType = BooleanType
-    // \u2705 \u4EE5\u4E0B\u65B9\u6848\u4E5F\u662F\u6B63\u786E\u7684
-    returnType = "java.lang.Boolean"
-}
-
-// \u67E5\u627E\u4E00\u4E2A\u53D8\u91CF
-field {
-    // \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u4E3E\u4F8B
-    type = BooleanType
-}
-
exception

loggerE

NoSuchMethod/NoSuchConstructor/NoSuchField happend in [NAME]

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u5E76\u672A\u627E\u5230\u76EE\u6807\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002

\u89E3\u51B3\u65B9\u6848

\u8BF7\u786E\u8BA4\u4F60\u7684\u67E5\u627E\u6761\u4EF6\u662F\u5426\u80FD\u6B63\u786E\u5339\u914D\u5230\u76EE\u6807 Class \u4E2D\u7684\u6307\u5B9A\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002

exception

loggerE

Trying COUNT times and all failure by RemedyPlan

\u5F02\u5E38\u539F\u56E0

\u4F7F\u7528 RemedyPlan \u91CD\u65B0\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u65F6\u4F9D\u7136\u6CA1\u6709\u627E\u5230\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\u3002

\u89E3\u51B3\u65B9\u6848

\u8BF7\u786E\u8BA4\u4F60\u8BBE\u7F6E\u7684 RemedyPlan \u53C2\u6570\u4EE5\u53CA\u5F53\u524D APP \u5185\u5B58\u5728\u7684 Class\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

You must set a condition when finding a Method/Constructor/Field

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u65F6\u5E76\u672A\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    // \u8FD9\u91CC\u6CA1\u6709\u8BBE\u7F6E\u4EFB\u4F55\u6761\u4EF6
-}
-

\u89E3\u51B3\u65B9\u6848

\u8BF7\u5C06\u67E5\u627E\u6761\u4EF6\u8865\u5145\u5B8C\u6574\u5E76\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

\u5F02\u5E38\u539F\u56E0

\u901A\u8FC7 ClassLoader.searchClass \u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684 Class \u5BF9\u8C61\u3002

\u793A\u4F8B\u5982\u4E0B

customClassLoader?.searchClass {
-    from(...)
-    // ...
-}.get()
-

\u89E3\u51B3\u65B9\u6848

\u8FD9\u662F\u4E00\u4E2A\u5B89\u5168\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u4F60\u8BBE\u7F6E\u7684\u6761\u4EF6\uFF0C\u4F7F\u7528\u76F8\u5173\u5DE5\u5177\u67E5\u770B\u6240\u5728 Dex \u4E2D\u7684 Class \u4EE5\u53CA\u5B57\u8282\u7801\u5BF9\u8C61\u7279\u5F81\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

Can't find this Method/Constructor/Field in [CLASS]: CONTENT Generated by YukiReflection#ReflectionTool

\u5F02\u5E38\u539F\u56E0

\u901A\u8FC7\u6307\u5B9A\u6761\u4EF6\u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u4EE5\u53CA\u53D8\u91CF\u3002

\u793A\u4F8B\u5982\u4E0B

TargetClass.method {
-    name = "test"
-    param(BooleanType)
-}
-

\u89E3\u51B3\u65B9\u6848

\u8FD9\u662F\u4E00\u4E2A\u5B89\u5168\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u4F60\u8BBE\u7F6E\u7684\u6761\u4EF6\uFF0C\u4F7F\u7528\u76F8\u5173\u5DE5\u5177\u67E5\u770B\u6240\u5728 Class \u4E2D\u7684\u5B57\u8282\u7801\u5BF9\u8C61\u7279\u5F81\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

The number of VagueType must be at least less than the count of paramTypes

\u5F02\u5E38\u539F\u56E0

\u5728 Method\u3001Constructor \u67E5\u627E\u6761\u4EF6\u4E2D\u9519\u8BEF\u5730\u4F7F\u7528\u4E86 VagueType\u3002

\u793A\u4F8B\u5982\u4E0B

TargetClass.method {
-    name = "test"
-    // <\u60C5\u666F1>
-    param(VagueType)
-    // <\u60C5\u666F2>
-    param(VagueType, VagueType ...)
-}
-

\u89E3\u51B3\u65B9\u6848

VagueType \u4E0D\u80FD\u5728\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u53C2\u6570\u4E2D\u5B8C\u5168\u586B\u5145\uFF0C\u82E5\u5B58\u5728\u8FD9\u6837\u7684\u9700\u6C42\u8BF7\u4F7F\u7528 paramCount\u3002

exception

loggerE

Field match type class is not found

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u53D8\u91CF\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D type \u7684 Class \u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002

\u793A\u4F8B\u5982\u4E0B

field {
-    name = "test"
-    // \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 type \u7684 Class \u5E76\u4E0D\u5B58\u5728
-    type = "com.example.TestClass"
-}
-

\u89E3\u51B3\u65B9\u6848

\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D type \u7684 Class \u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

Method match returnType class is not found

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D returnType \u7684 Class \u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    name = "test"
-    // \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 returnType \u7684 Class \u5E76\u4E0D\u5B58\u5728
-    returnType = "com.example.TestClass"
-}
-

\u89E3\u51B3\u65B9\u6848

\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D returnType \u7684 Class \u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002

exception

loggerE

Method/Constructor match paramType[INDEX] class is not found

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u6240\u8BBE\u7F6E\u7684\u67E5\u627E\u6761\u4EF6\u4E2D param \u7684 index \u53F7\u4E0B\u6807\u7684 Class \u5B9E\u4F8B\u672A\u88AB\u627E\u5230\u3002

method {
-    name = "test"
-    // \u5047\u8BBE\u8FD9\u91CC\u8BBE\u7F6E\u7684 1 \u53F7\u4E0B\u6807\u7684 Class \u5E76\u4E0D\u5B58\u5728
-    param(StringClass, "com.example.TestClass", BooleanType)
-}
-

\u89E3\u51B3\u65B9\u6848

\u8BF7\u68C0\u67E5\u67E5\u627E\u6761\u4EF6\u4E2D param \u7684 index \u53F7\u4E0B\u6807\u7684 Class \u662F\u5426\u5B58\u5728\uFF0C\u7136\u540E\u518D\u8BD5\u4E00\u6B21\u3002

\u963B\u65AD\u5F02\u5E38

\u8FD9\u4E9B\u5F02\u5E38\u4F1A\u76F4\u63A5\u5BFC\u81F4 APP \u505C\u6B62\u8FD0\u884C (FC)\uFF0C\u540C\u65F6\u4F1A\u5728\u63A7\u5236\u53F0\u6253\u5370 E \u7EA7\u522B\u7684\u65E5\u5FD7\u3002

exception

NoClassDefFoundError

Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

\u5F02\u5E38\u539F\u56E0

\u901A\u8FC7 String.toClass(...) \u6216 classOf<...>() \u627E\u4E0D\u5230\u9700\u8981\u67E5\u627E\u7684 Class \u5BF9\u8C61\u3002

\u793A\u4F8B\u5982\u4E0B

"com.demo.Test".toClass()
-

\u89E3\u51B3\u65B9\u6848

\u8BF7\u68C0\u67E5\u5F53\u524D\u5B57\u7B26\u4E32\u6216\u5B9E\u4F53\u5339\u914D\u5230\u7684 Class \u662F\u5426\u5B58\u5728\u4E8E\u5F53\u524D ClassLoader\uFF0C\u5E76\u518D\u8BD5\u4E00\u6B21\u3002

exception

IllegalStateException

ClassLoader [CLASSLOADER] is not a DexClassLoader

\u5F02\u5E38\u539F\u56E0

\u4F7F\u7528 ClassLoader.searchClass \u67E5\u627E Class \u4F46\u662F\u5F53\u524D ClassLoader \u5E76\u4E0D\u7EE7\u627F\u4E8E BaseDexClassLoader\u3002

\u89E3\u51B3\u65B9\u6848

\u8FD9\u79CD\u60C5\u51B5\u57FA\u672C\u4E0D\u5B58\u5728\uFF0C\u9664\u975E\u5F53\u524D APP \u5F15\u7528\u4E86\u975E ART \u5E73\u53F0\u7684\u53EF\u6267\u884C\u6587\u4EF6 (\u4F46\u662F\u8FD9\u79CD\u60C5\u51B5\u8FD8\u662F\u4E0D\u4F1A\u5B58\u5728) \u6216\u5F53\u524D ClassLoader \u4E3A\u7A7A\u3002

exception

IllegalStateException

VariousClass match failed of those CLASSES

\u5F02\u5E38\u539F\u56E0

\u5728\u4F7F\u7528 VariousClass \u521B\u5EFA\u4E0D\u786E\u5B9A\u7684 Class \u5BF9\u8C61\u65F6\u5168\u90E8\u7684 Class \u90FD\u6CA1\u6709\u88AB\u627E\u5230\u3002

\u89E3\u51B3\u65B9\u6848

\u68C0\u67E5\u5F53\u524D APP \u5185\u662F\u5426\u5B58\u5728\u5176\u4E2D\u80FD\u591F\u5339\u914D\u7684 Class \u540E\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002

exception

IllegalStateException

paramTypes is empty, please use emptyParam() instead

\u5F02\u5E38\u539F\u56E0

\u5728\u67E5\u627E\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u65F6\u4FDD\u7559\u4E86\u7A7A\u7684 param \u65B9\u6CD5\u3002

\u793A\u4F8B\u5982\u4E0B

method {
-    name = "test"
-    // \u62EC\u53F7\u5185\u6CA1\u6709\u586B\u5199\u4EFB\u4F55\u53C2\u6570
-    param()
-}
-

\u89E3\u51B3\u65B9\u6848

\u82E5\u8981\u6807\u8BC6\u6B64\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u6CA1\u6709\u53C2\u6570\uFF0C\u4F60\u53EF\u4EE5\u6709\u5982\u4E0B\u8BBE\u7F6E\u65B9\u6CD5\u3002

\u7B2C\u4E00\u79CD\uFF0C\u8BBE\u7F6E emptyParam (\u63A8\u8350)

\u793A\u4F8B\u5982\u4E0B

method {
-    name = "test"
-    emptyParam()
-}
-

\u7B2C\u4E8C\u79CD\uFF0C\u8BBE\u7F6E paramCount = 0

\u793A\u4F8B\u5982\u4E0B

method {
-    name = "test"
-    paramCount = 0
-}
-
exception

IllegalStateException

Cannot create classes cache for "android", please remove "name" param

\u5F02\u5E38\u539F\u56E0

\u5728\u7CFB\u7EDF\u6846\u67B6 (android) \u4E2D\u4F7F\u7528\u4E86 DexClassFinder \u7684\u7F13\u5B58\u529F\u80FD searchClass(name = ...)\u3002

\u793A\u4F8B\u5982\u4E0B

searchClass(name = "test") {
-    from(...)
-    // ...
-}.get()
-

\u89E3\u51B3\u65B9\u6848

\u7531\u4E8E\u7F13\u5B58\u4F1A\u5C06\u627E\u5230\u7684 Class \u540D\u79F0\u5B58\u5165 SharedPreferences\uFF0C\u4F46\u662F\u7CFB\u7EDF\u6846\u67B6\u4E0D\u5B58\u5728 data \u76EE\u5F55\uFF0C\u6240\u4EE5\u8BF7\u4E0D\u8981\u5728\u7CFB\u7EDF\u6846\u67B6\u4E2D\u4F7F\u7528\u6B64\u529F\u80FD\u3002

exception

IllegalStateException

Target Class type cannot cast to TYPE

\u5F02\u5E38\u539F\u56E0

\u4F7F\u7528 Class.toClass\u3001Class.toClassOrNull\u3001GenericClass.argument \u65B9\u6CD5\u5C06\u5B57\u7B26\u4E32\u7C7B\u540D\u8F6C\u6362\u4E3A\u76EE\u6807 Class \u65F6\u58F0\u660E\u4E86\u9519\u8BEF\u7684\u7C7B\u578B\u3002

\u4EE5\u4E0B\u4F7F\u7528 Class.toClass \u65B9\u6CD5\u6765\u8FDB\u884C\u793A\u4F8B\u3002

\u793A\u4F8B\u5982\u4E0B

// \u5047\u8BBE\u76EE\u6807\u7C7B\u578B\u662F Activity \u4F46\u662F\u88AB\u9519\u8BEF\u5730\u8F6C\u6362\u4E3A\u4E86 WrongClass \u7C7B\u578B
-val clazz = "android.app.Activity".toClass<WrongClass>()
-

\u89E3\u51B3\u65B9\u6848

\u793A\u4F8B\u5982\u4E0B

// <\u89E3\u51B3\u65B9\u6848 1> \u586B\u5199\u6B63\u786E\u7684\u7C7B\u578B
-val clazz1 = "android.app.Activity".toClass<Activity>()
-// <\u89E3\u51B3\u65B9\u6848 2> \u4E0D\u586B\u5199\u6CDB\u578B\u58F0\u660E
-val clazz2 = "android.app.Activity".toClass()
-

\u8BF7\u786E\u4FDD\u6267\u884C\u65B9\u6CD5\u540E\u58F0\u660E\u7684\u6CDB\u578B\u662F\u6307\u5B9A\u7684\u76EE\u6807 Class \u7C7B\u578B\uFF0C\u5728\u4E0D\u786E\u5B9A\u76EE\u6807\u7C7B\u578B\u7684\u60C5\u51B5\u4E0B\u4F60\u53EF\u4EE5\u4E0D\u9700\u8981\u586B\u5199\u6CDB\u578B\u58F0\u660E\u3002

`,137),p=[o];function c(t,i){return n(),e("div",null,p)}const d=s(l,[["render",c],["__file","api-exception.html.vue"]]);export{d as default}; diff --git a/docs/assets/api-exception.html.6f5a5377.js b/docs/assets/api-exception.html.6f5a5377.js deleted file mode 100644 index 78fa7d3..0000000 --- a/docs/assets/api-exception.html.6f5a5377.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-5b43296c","path":"/zh-cn/config/api-exception.html","title":"API \u5F02\u5E38\u5904\u7406","lang":"zh-CN","frontmatter":{"pageClass":"hidden-anchor-page"},"excerpt":"","headers":[{"level":2,"title":"\u975E\u963B\u65AD\u5F02\u5E38","slug":"\u975E\u963B\u65AD\u5F02\u5E38","link":"#\u975E\u963B\u65AD\u5F02\u5E38","children":[]},{"level":2,"title":"\u963B\u65AD\u5F02\u5E38","slug":"\u963B\u65AD\u5F02\u5E38","link":"#\u963B\u65AD\u5F02\u5E38","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/config/api-exception.md"}');export{e as data}; diff --git a/docs/assets/api-exception.html.f26818cd.js b/docs/assets/api-exception.html.f26818cd.js deleted file mode 100644 index b6e5dc3..0000000 --- a/docs/assets/api-exception.html.f26818cd.js +++ /dev/null @@ -1,86 +0,0 @@ -import{_ as s,o as e,c as n,a}from"./app.2add9aa5.js";const o={},l=a(`

API Exception Handling

Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiReflection and how to deal with them.

The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

Non-Blocking Exceptions

These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

exception

loggerE

Method/Constructor/Field match type "TYPE" not allowed

Abnormal

A disallowed parameter type was set when looking up methods, constructors, and variables.

The following example

// Find a method
-method {
-    // \u2757 Invalid type example is set
-    param(false, 1, 0)
-    // \u2757 Invalid type example is set
-    returnType = false
-}
-
-// Find a variable
-field {
-    // \u2757 Invalid type example is set
-    type = false
-}
-

Solution

In the search, param, returnType, type only accept Class, String, VariousClass types, and parameter instances cannot be passed in.

The following example

// Find a method
-method {
-    // \u2705 Examples of correct usage
-    param(BooleanType, IntType, IntType)
-    // \u2705 Examples of correct usage
-    returnType = BooleanType
-    // \u2705 The following scheme is also correct
-    returnType = "java.lang.Boolean"
-}
-
-// Find a variable
-field {
-    // \u2705 Examples of correct usage
-    type = BooleanType
-}
-
exception

loggerE

NoSuchMethod/NoSuchConstructor/NoSuchField happend in [NAME]

Abnormal

The target method, constructor, and variable were not found when looking for methods, constructors, and variables.

Solution

Please confirm that your search criteria can correctly match the specified methods, constructors and variables in the target Class.

exception

loggerE

Trying COUNT times and all failure by RemedyPlan

Abnormal

When using RemedyPlan to search for methods, constructors, and variables, the methods, constructors, and variables are still not found.

Solution

Please confirm the RemedyPlan parameter you set and the Class that exists in the current app, and try again.

exception

loggerE

You must set a condition when finding a Method/Constructor/Field

Abnormal

No conditions are set when looking for methods, constructors, and variables.

The following example

method {
-    // No conditions are set here
-}
-

Solution

Please complete your search criteria and try again.

exception

loggerE

Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

Abnormal

The Class object to be searched for was not found via ClassLoader.searchClass.

The following example

customClassLoader?.searchClass {
-    from(...)
-    // ...
-}.get()
-

Solution

This is a security exception, please check the conditions you set, use the relevant tools to view the Class and bytecode object characteristics in the Dex and try again.

exception

loggerE

Can't find this Method/Constructor/Field in [CLASS]: CONTENT Generated by YukiReflection#ReflectionTool

Abnormal

The methods, constructors, and variables that need to be found cannot be found by specifying conditions.

The following example

TargetClass.method {
-    name = "test"
-    param(BooleanType)
-}
-

Solution

This is a security exception, please check the conditions you set, use the relevant tools to view the bytecode object characteristics in the Class, and try again.

exception

loggerE

The number of VagueType must be at least less than the count of paramTypes

Abnormal

Incorrect use of VagueType in Method, Constructor lookup conditions.

The following example

TargetClass.method {
-    name = "test"
-    // <Scenario 1>
-    param(VagueType)
-    // <Scenario 2>
-    param(VagueType, VagueType ...)
-}
-

Solution

VagueType cannot be completely filled in method and constructor parameters. If there is such a requirement, please use paramCount.

exception

loggerE

Field match type class is not found

Abnormal

An instance of Class for type was not found in the lookup criteria set when looking up the variable.

The following example

field {
-    name = "test"
-    // Assume that the Class of the type set here does not exist
-    type = "com.example.TestClass"
-}
-

Solution

Please check if Class of type in the lookup condition exists and try again.

exception

loggerE

Method match returnType class is not found

Abnormal

An instance of Class of returnType was not found in the search criteria set when looking up the method.

The following example

method {
-    name = "test"
-    // Assume that the Class of returnType set here does not exist
-    returnType = "com.example.TestClass"
-}
-

Solution

Please check if Class of returnType in the lookup condition exists and try again.

exception

loggerE

Method/Constructor match paramType[INDEX] class is not found

Abnormal

The Class instance subscripted by the index number of param was not found in the search conditions set when searching for methods and constructors.

method {
-    name = "test"
-    // Assume that the Class with subscript "No.1" set here does not exist
-    param(StringClass, "com.example.TestClass", BooleanType)
-}
-

Solution

Please check if the Class subscripted by the index number of param in the lookup condition exists and try again.

Blocking Exceptions

These exceptions will directly cause the app to stop running (FC), at the same time print E level logs on the console.

exception

NoClassDefFoundError

Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

Abnormal

The Class object you were looking for was not found via String.toClass(...) or classOf<...>().

The following example

"com.demo.Test".toClass()
-

Solution

Please check if the Class matched by the current string or entity exists in the current ClassLoader and try again.

exception

IllegalStateException

ClassLoader [CLASSLOADER] is not a DexClassLoader

Abnormal

Use ClassLoader.searchClass to find Class but currently ClassLoader does not extends BaseDexClassLoader.

Solution

This situation basically does not exist, unless the current app references a Non-ART platform executable (which not realistic) or the current ClassLoader is null.

exception

IllegalStateException

VariousClass match failed of those CLASSES

Abnormal

All Class were not found when creating indeterminate Class objects using VariousClass.

Solution

After checking whether there is a matching Class in the current app and try again.

exception

IllegalStateException

paramTypes is empty, please use emptyParam() instead

Abnormal

The empty param method is preserved when looking up methods, constructors.

The following example

method {
-    name = "test"
-    // No parameters are filled in parentheses
-    param()
-}
-

Solution

To identify this method, the constructor has no parameters, you can have a setter method as follows.

The first way, set emptyParam (recommended)

The following example

method {
-    name = "test"
-    emptyParam()
-}
-

The second way, set paramCount = 0

The following example

method {
-    name = "test"
-    paramCount = 0
-}
-
exception

IllegalStateException

Cannot create classes cache for "android", please remove "name" param

Abnormal

The DexClassFinder cache function searchClass(name = ...) is used in the System Framework ("android") app.

The following example

searchClass(name = "test") {
-    from(...)
-    // ...
-}.get()
-

Solution

Since the cache will store the found Class name in SharedPreferences, but the data directory does not exist in the System Framework, so please do not use this function in the System Framework.

exception

IllegalStateException

Target Class type cannot cast to TYPE

Abnormal

Wrong type declared when converting string class name to target Class using Class.toClass, Class.toClassOrNull, GenericClass.argument methods.

The following uses the Class.toClass method as an example.

The following example

// Assume the target type is Activity but it was wrongly cast to WrongClass type
-val clazz = "android.app.Activity".toClass<WrongClass>()
-

Solution

The following example

// <Solution 1> Fill in the correct type
-val clazz1 = "android.app.Activity".toClass<Activity>()
-// <Solution 2> Do not fill in the generic declaration
-val clazz2 = "android.app.Activity".toClass()
-

Please ensure that the generic type declared after executing the method is the specified target Class type, and you do not need to fill in the generic declaration if the target type is not sure.

`,137),t=[l];function p(c,i){return e(),n("div",null,t)}const d=s(o,[["render",p],["__file","api-exception.html.vue"]]);export{d as default}; diff --git a/docs/assets/app.2add9aa5.js b/docs/assets/app.2add9aa5.js deleted file mode 100644 index ad5f4bf..0000000 --- a/docs/assets/app.2add9aa5.js +++ /dev/null @@ -1,10 +0,0 @@ -const Zs="modulepreload",Xs=function(e){return"/YukiReflection/"+e},Wi={},_=function(t,l,n){return!l||l.length===0?t():Promise.all(l.map(i=>{if(i=Xs(i),i in Wi)return;Wi[i]=!0;const o=i.endsWith(".css"),r=o?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${i}"]${r}`))return;const s=document.createElement("link");if(s.rel=o?"stylesheet":Zs,o||(s.as="script",s.crossOrigin=""),s.href=i,document.head.appendChild(s),o)return new Promise((a,c)=>{s.addEventListener("load",a),s.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${i}`)))})})).then(()=>t())},ea={"v-8daa1a0e":()=>_(()=>import("./index.html.7c46b7b0.js"),[]).then(({data:e})=>e),"v-2d0a870d":()=>_(()=>import("./index.html.b541ea38.js"),[]).then(({data:e})=>e),"v-c0c85b84":()=>_(()=>import("./index.html.0336a74d.js"),[]).then(({data:e})=>e),"v-7a15fe3b":()=>_(()=>import("./about.html.2effd4b1.js"),[]).then(({data:e})=>e),"v-3f851d14":()=>_(()=>import("./changelog.html.01288623.js"),[]).then(({data:e})=>e),"v-193cf592":()=>_(()=>import("./contacts.html.f1c02fdf.js"),[]).then(({data:e})=>e),"v-ae7b83f2":()=>_(()=>import("./future.html.aa0c285e.js"),[]).then(({data:e})=>e),"v-c557cfcc":()=>_(()=>import("./features.html.01536ff8.js"),[]).then(({data:e})=>e),"v-64fc7bb8":()=>_(()=>import("./home.html.817a2e55.js"),[]).then(({data:e})=>e),"v-9cfea7fc":()=>_(()=>import("./api-example.html.6daf2d5c.js"),[]).then(({data:e})=>e),"v-72c12b7d":()=>_(()=>import("./api-exception.html.58702900.js"),[]).then(({data:e})=>e),"v-efb45d4c":()=>_(()=>import("./home.html.eef2381c.js"),[]).then(({data:e})=>e),"v-72889797":()=>_(()=>import("./quick-start.html.cdfe78bb.js"),[]).then(({data:e})=>e),"v-41967128":()=>_(()=>import("./about.html.b758f732.js"),[]).then(({data:e})=>e),"v-0e6c3476":()=>_(()=>import("./changelog.html.eb0b25c0.js"),[]).then(({data:e})=>e),"v-6cf86266":()=>_(()=>import("./contacts.html.3310a645.js"),[]).then(({data:e})=>e),"v-3106ca14":()=>_(()=>import("./future.html.a5999f89.js"),[]).then(({data:e})=>e),"v-47e315ee":()=>_(()=>import("./features.html.2e4ae9d9.js"),[]).then(({data:e})=>e),"v-c8deafb2":()=>_(()=>import("./home.html.a2b832f6.js"),[]).then(({data:e})=>e),"v-6a609e09":()=>_(()=>import("./home.html.6d4e805a.js"),[]).then(({data:e})=>e),"v-24840ff0":()=>_(()=>import("./quick-start.html.5cdc09d9.js"),[]).then(({data:e})=>e),"v-c6114c9e":()=>_(()=>import("./api-example.html.90859470.js"),[]).then(({data:e})=>e),"v-5b43296c":()=>_(()=>import("./api-exception.html.6f5a5377.js"),[]).then(({data:e})=>e),"v-23f4d2be":()=>_(()=>import("./YukiReflection.html.071d5ea0.js"),[]).then(({data:e})=>e),"v-c088ede0":()=>_(()=>import("./YukiReflection.html.787cb57f.js"),[]).then(({data:e})=>e),"v-47f17664":()=>_(()=>import("./CurrentClass.html.4fb3c7c5.js"),[]).then(({data:e})=>e),"v-38df33ac":()=>_(()=>import("./GenericClass.html.18ef844b.js"),[]).then(({data:e})=>e),"v-3a8666c0":()=>_(()=>import("./VariousClass.html.be531e78.js"),[]).then(({data:e})=>e),"v-728f231c":()=>_(()=>import("./ReflectionFactory.html.660311db.js"),[]).then(({data:e})=>e),"v-406687ff":()=>_(()=>import("./CurrentClass.html.1f324cf5.js"),[]).then(({data:e})=>e),"v-c5831246":()=>_(()=>import("./GenericClass.html.80c441b8.js"),[]).then(({data:e})=>e),"v-c234ac1e":()=>_(()=>import("./VariousClass.html.7a95c6f9.js"),[]).then(({data:e})=>e),"v-b3841eba":()=>_(()=>import("./ReflectionFactory.html.79e3b099.js"),[]).then(({data:e})=>e),"v-740d06da":()=>_(()=>import("./BaseFinder.html.fb47fda7.js"),[]).then(({data:e})=>e),"v-6d6cd473":()=>_(()=>import("./DexClassFinder.html.7f9c18ee.js"),[]).then(({data:e})=>e),"v-b3220076":()=>_(()=>import("./ConstructorFinder.html.91c23734.js"),[]).then(({data:e})=>e),"v-4b907076":()=>_(()=>import("./FieldFinder.html.d5dcfef4.js"),[]).then(({data:e})=>e),"v-012ee5a6":()=>_(()=>import("./MethodFinder.html.704be21f.js"),[]).then(({data:e})=>e),"v-c945cb6e":()=>_(()=>import("./BaseFinder.html.69bb751c.js"),[]).then(({data:e})=>e),"v-2d13d624":()=>_(()=>import("./DexClassFinder.html.e0965adb.js"),[]).then(({data:e})=>e),"v-722cd474":()=>_(()=>import("./ConstructorFinder.html.372473c1.js"),[]).then(({data:e})=>e),"v-293ae898":()=>_(()=>import("./FieldFinder.html.71816419.js"),[]).then(({data:e})=>e),"v-155c9f97":()=>_(()=>import("./MethodFinder.html.3e0643fa.js"),[]).then(({data:e})=>e),"v-6c58c435":()=>_(()=>import("./ComponentTypeFactory.html.86fc30e1.js"),[]).then(({data:e})=>e),"v-25cdee85":()=>_(()=>import("./GraphicsTypeFactory.html.3ab9700c.js"),[]).then(({data:e})=>e),"v-12826b1f":()=>_(()=>import("./ViewTypeFactory.html.419f7049.js"),[]).then(({data:e})=>e),"v-597ac69b":()=>_(()=>import("./DefinedTypeFactory.html.5311d687.js"),[]).then(({data:e})=>e),"v-5ad1133e":()=>_(()=>import("./VariableTypeFactory.html.216c2fbf.js"),[]).then(({data:e})=>e),"v-6f96d791":()=>_(()=>import("./CountRules.html.aa55eac0.js"),[]).then(({data:e})=>e),"v-56071599":()=>_(()=>import("./ModifierRules.html.bf55a30e.js"),[]).then(({data:e})=>e),"v-4ea9e766":()=>_(()=>import("./NameRules.html.2124d233.js"),[]).then(({data:e})=>e),"v-3045c7fe":()=>_(()=>import("./ObjectRules.html.0a6223eb.js"),[]).then(({data:e})=>e),"v-cce2b7b6":()=>_(()=>import("./ConstructorRules.html.7769fbd0.js"),[]).then(({data:e})=>e),"v-82a85036":()=>_(()=>import("./FieldRules.html.cc84b291.js"),[]).then(({data:e})=>e),"v-71ecb893":()=>_(()=>import("./MemberRules.html.2d5c89a4.js"),[]).then(({data:e})=>e),"v-5e7e121a":()=>_(()=>import("./MethodRules.html.46e12f82.js"),[]).then(({data:e})=>e),"v-3dbf4880":()=>_(()=>import("./CountRules.html.69b807a7.js"),[]).then(({data:e})=>e),"v-701721ec":()=>_(()=>import("./ModifierRules.html.063cc2f9.js"),[]).then(({data:e})=>e),"v-264e7384":()=>_(()=>import("./NameRules.html.538d5551.js"),[]).then(({data:e})=>e),"v-b0f7c49c":()=>_(()=>import("./ObjectRules.html.ec943416.js"),[]).then(({data:e})=>e),"v-ec153654":()=>_(()=>import("./ConstructorRules.html.ed54d54f.js"),[]).then(({data:e})=>e),"v-30993156":()=>_(()=>import("./FieldRules.html.0a9d082d.js"),[]).then(({data:e})=>e),"v-3daa8d42":()=>_(()=>import("./MemberRules.html.94fb57e3.js"),[]).then(({data:e})=>e),"v-2a3be6c9":()=>_(()=>import("./MethodRules.html.c94c00ea.js"),[]).then(({data:e})=>e),"v-30e525ac":()=>_(()=>import("./DefinedTypeFactory.html.b02e4f3c.js"),[]).then(({data:e})=>e),"v-7f47f9f8":()=>_(()=>import("./ComponentTypeFactory.html.f94d8b50.js"),[]).then(({data:e})=>e),"v-5a1019d6":()=>_(()=>import("./GraphicsTypeFactory.html.0a5a863c.js"),[]).then(({data:e})=>e),"v-be0e3220":()=>_(()=>import("./ViewTypeFactory.html.fd43bb20.js"),[]).then(({data:e})=>e),"v-12f074b0":()=>_(()=>import("./VariableTypeFactory.html.85b2fcf2.js"),[]).then(({data:e})=>e),"v-4f47dfda":()=>_(()=>import("./MemberRulesResult.html.0df424dd.js"),[]).then(({data:e})=>e),"v-503f5f8b":()=>_(()=>import("./MemberRulesResult.html.aa74ca3c.js"),[]).then(({data:e})=>e),"v-3706649a":()=>_(()=>import("./404.html.c038a05a.js"),[]).then(({data:e})=>e)};function mi(e,t){const l=Object.create(null),n=e.split(",");for(let i=0;i!!l[i.toLowerCase()]:i=>!!l[i]}const ta="itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly",la=mi(ta);function ur(e){return!!e||e===""}function Nl(e){if(te(e)){const t={};for(let l=0;l{if(l){const n=l.split(ia);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function Ye(e){let t="";if(_e(e))t=e;else if(te(e))for(let l=0;l_e(e)?e:e==null?"":te(e)||Ie(e)&&(e.toString===mr||!re(e.toString))?JSON.stringify(e,dr,2):String(e),dr=(e,t)=>t&&t.__v_isRef?dr(e,t.value):sl(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((l,[n,i])=>(l[`${n} =>`]=i,l),{})}:hr(t)?{[`Set(${t.size})`]:[...t.values()]}:Ie(t)&&!te(t)&&!pr(t)?String(t):t,Ce={},rl=[],st=()=>{},ra=()=>!1,sa=/^on[^a-z]/,$l=e=>sa.test(e),pi=e=>e.startsWith("onUpdate:"),Ne=Object.assign,gi=(e,t)=>{const l=e.indexOf(t);l>-1&&e.splice(l,1)},aa=Object.prototype.hasOwnProperty,de=(e,t)=>aa.call(e,t),te=Array.isArray,sl=e=>yn(e)==="[object Map]",hr=e=>yn(e)==="[object Set]",re=e=>typeof e=="function",_e=e=>typeof e=="string",vi=e=>typeof e=="symbol",Ie=e=>e!==null&&typeof e=="object",fr=e=>Ie(e)&&re(e.then)&&re(e.catch),mr=Object.prototype.toString,yn=e=>mr.call(e),ca=e=>yn(e).slice(8,-1),pr=e=>yn(e)==="[object Object]",bi=e=>_e(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cl=mi(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),kn=e=>{const t=Object.create(null);return l=>t[l]||(t[l]=e(l))},ua=/-(\w)/g,ht=kn(e=>e.replace(ua,(t,l)=>l?l.toUpperCase():"")),da=/\B([A-Z])/g,Zt=kn(e=>e.replace(da,"-$1").toLowerCase()),xn=kn(e=>e.charAt(0).toUpperCase()+e.slice(1)),Fn=kn(e=>e?`on${xn(e)}`:""),Al=(e,t)=>!Object.is(e,t),Sn=(e,t)=>{for(let l=0;l{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:l})},gr=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Gi;const ha=()=>Gi||(Gi=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let We;class fa{constructor(t=!1){this.active=!0,this.effects=[],this.cleanups=[],!t&&We&&(this.parent=We,this.index=(We.scopes||(We.scopes=[])).push(this)-1)}run(t){if(this.active){const l=We;try{return We=this,t()}finally{We=l}}}on(){We=this}off(){We=this.parent}stop(t){if(this.active){let l,n;for(l=0,n=this.effects.length;l{const t=new Set(e);return t.w=0,t.n=0,t},vr=e=>(e.w&Ft)>0,br=e=>(e.n&Ft)>0,va=({deps:e})=>{if(e.length)for(let t=0;t{const{deps:t}=e;if(t.length){let l=0;for(let n=0;n{(c==="length"||c>=n)&&s.push(a)});else switch(l!==void 0&&s.push(r.get(l)),t){case"add":te(e)?bi(l)&&s.push(r.get("length")):(s.push(r.get(Yt)),sl(e)&&s.push(r.get(Yn)));break;case"delete":te(e)||(s.push(r.get(Yt)),sl(e)&&s.push(r.get(Yn)));break;case"set":sl(e)&&s.push(r.get(Yt));break}if(s.length===1)s[0]&&Qn(s[0]);else{const a=[];for(const c of s)c&&a.push(...c);Qn(_i(a))}}function Qn(e,t){const l=te(e)?e:[...e];for(const n of l)n.computed&&Qi(n);for(const n of l)n.computed||Qi(n)}function Qi(e,t){(e!==ot||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const _a=mi("__proto__,__v_isRef,__isVue"),kr=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(vi)),ya=ki(),ka=ki(!1,!0),xa=ki(!0),Ji=Ea();function Ea(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...l){const n=ve(this);for(let o=0,r=this.length;o{e[t]=function(...l){ml();const n=ve(this)[t].apply(this,l);return pl(),n}}),e}function ki(e=!1,t=!1){return function(n,i,o){if(i==="__v_isReactive")return!e;if(i==="__v_isReadonly")return e;if(i==="__v_isShallow")return t;if(i==="__v_raw"&&o===(e?t?$a:wr:t?Rr:Cr).get(n))return n;const r=te(n);if(!e&&r&&de(Ji,i))return Reflect.get(Ji,i,o);const s=Reflect.get(n,i,o);return(vi(i)?kr.has(i):_a(i))||(e||Je(n,"get",i),t)?s:ze(s)?r&&bi(i)?s:s.value:Ie(s)?e?Ci(s):gl(s):s}}const Ca=xr(),Ra=xr(!0);function xr(e=!1){return function(l,n,i,o){let r=l[n];if(Il(r)&&ze(r)&&!ze(i))return!1;if(!e&&!Il(i)&&(Jn(i)||(i=ve(i),r=ve(r)),!te(l)&&ze(r)&&!ze(i)))return r.value=i,!0;const s=te(l)&&bi(n)?Number(n)e,En=e=>Reflect.getPrototypeOf(e);function Wl(e,t,l=!1,n=!1){e=e.__v_raw;const i=ve(e),o=ve(t);l||(t!==o&&Je(i,"get",t),Je(i,"get",o));const{has:r}=En(i),s=n?xi:l?wi:Fl;if(r.call(i,t))return s(e.get(t));if(r.call(i,o))return s(e.get(o));e!==i&&e.get(t)}function Gl(e,t=!1){const l=this.__v_raw,n=ve(l),i=ve(e);return t||(e!==i&&Je(n,"has",e),Je(n,"has",i)),e===i?l.has(e):l.has(e)||l.has(i)}function Yl(e,t=!1){return e=e.__v_raw,!t&&Je(ve(e),"iterate",Yt),Reflect.get(e,"size",e)}function Zi(e){e=ve(e);const t=ve(this);return En(t).has.call(t,e)||(t.add(e),_t(t,"add",e,e)),this}function Xi(e,t){t=ve(t);const l=ve(this),{has:n,get:i}=En(l);let o=n.call(l,e);o||(e=ve(e),o=n.call(l,e));const r=i.call(l,e);return l.set(e,t),o?Al(t,r)&&_t(l,"set",e,t):_t(l,"add",e,t),this}function eo(e){const t=ve(this),{has:l,get:n}=En(t);let i=l.call(t,e);i||(e=ve(e),i=l.call(t,e)),n&&n.call(t,e);const o=t.delete(e);return i&&_t(t,"delete",e,void 0),o}function to(){const e=ve(this),t=e.size!==0,l=e.clear();return t&&_t(e,"clear",void 0,void 0),l}function Ql(e,t){return function(n,i){const o=this,r=o.__v_raw,s=ve(r),a=t?xi:e?wi:Fl;return!e&&Je(s,"iterate",Yt),r.forEach((c,u)=>n.call(i,a(c),a(u),o))}}function Jl(e,t,l){return function(...n){const i=this.__v_raw,o=ve(i),r=sl(o),s=e==="entries"||e===Symbol.iterator&&r,a=e==="keys"&&r,c=i[e](...n),u=l?xi:t?wi:Fl;return!t&&Je(o,"iterate",a?Yn:Yt),{next(){const{value:h,done:f}=c.next();return f?{value:h,done:f}:{value:s?[u(h[0]),u(h[1])]:u(h),done:f}},[Symbol.iterator](){return this}}}}function xt(e){return function(...t){return e==="delete"?!1:this}}function Aa(){const e={get(o){return Wl(this,o)},get size(){return Yl(this)},has:Gl,add:Zi,set:Xi,delete:eo,clear:to,forEach:Ql(!1,!1)},t={get(o){return Wl(this,o,!1,!0)},get size(){return Yl(this)},has:Gl,add:Zi,set:Xi,delete:eo,clear:to,forEach:Ql(!1,!0)},l={get(o){return Wl(this,o,!0)},get size(){return Yl(this,!0)},has(o){return Gl.call(this,o,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Ql(!0,!1)},n={get(o){return Wl(this,o,!0,!0)},get size(){return Yl(this,!0)},has(o){return Gl.call(this,o,!0)},add:xt("add"),set:xt("set"),delete:xt("delete"),clear:xt("clear"),forEach:Ql(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{e[o]=Jl(o,!1,!1),l[o]=Jl(o,!0,!1),t[o]=Jl(o,!1,!0),n[o]=Jl(o,!0,!0)}),[e,l,t,n]}const[Ia,Fa,Sa,za]=Aa();function Ei(e,t){const l=t?e?za:Sa:e?Fa:Ia;return(n,i,o)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(de(l,i)&&i in n?l:n,i,o)}const Da={get:Ei(!1,!1)},Ma={get:Ei(!1,!0)},Na={get:Ei(!0,!1)},Cr=new WeakMap,Rr=new WeakMap,wr=new WeakMap,$a=new WeakMap;function Va(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Ha(e){return e.__v_skip||!Object.isExtensible(e)?0:Va(ca(e))}function gl(e){return Il(e)?e:Ri(e,!1,Er,Da,Cr)}function ja(e){return Ri(e,!1,Oa,Ma,Rr)}function Ci(e){return Ri(e,!0,Pa,Na,wr)}function Ri(e,t,l,n,i){if(!Ie(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const o=i.get(e);if(o)return o;const r=Ha(e);if(r===0)return e;const s=new Proxy(e,r===2?n:l);return i.set(e,s),s}function al(e){return Il(e)?al(e.__v_raw):!!(e&&e.__v_isReactive)}function Il(e){return!!(e&&e.__v_isReadonly)}function Jn(e){return!!(e&&e.__v_isShallow)}function Tr(e){return al(e)||Il(e)}function ve(e){const t=e&&e.__v_raw;return t?ve(t):e}function Lr(e){return rn(e,"__v_skip",!0),e}const Fl=e=>Ie(e)?gl(e):e,wi=e=>Ie(e)?Ci(e):e;function Pr(e){Ot&&ot&&(e=ve(e),yr(e.dep||(e.dep=_i())))}function Or(e,t){e=ve(e),e.dep&&Qn(e.dep)}function ze(e){return!!(e&&e.__v_isRef===!0)}function ke(e){return Ir(e,!1)}function Ar(e){return Ir(e,!0)}function Ir(e,t){return ze(e)?e:new Ba(e,t)}class Ba{constructor(t,l){this.__v_isShallow=l,this.dep=void 0,this.__v_isRef=!0,this._rawValue=l?t:ve(t),this._value=l?t:Fl(t)}get value(){return Pr(this),this._value}set value(t){t=this.__v_isShallow?t:ve(t),Al(t,this._rawValue)&&(this._rawValue=t,this._value=this.__v_isShallow?t:Fl(t),Or(this))}}function A(e){return ze(e)?e.value:e}const Ua={get:(e,t,l)=>A(Reflect.get(e,t,l)),set:(e,t,l,n)=>{const i=e[t];return ze(i)&&!ze(l)?(i.value=l,!0):Reflect.set(e,t,l,n)}};function Fr(e){return al(e)?e:new Proxy(e,Ua)}function Cn(e){const t=te(e)?new Array(e.length):{};for(const l in e)t[l]=Ka(e,l);return t}class qa{constructor(t,l,n){this._object=t,this._key=l,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}}function Ka(e,t,l){const n=e[t];return ze(n)?n:new qa(e,t,l)}class Wa{constructor(t,l,n,i){this._setter=l,this.dep=void 0,this.__v_isRef=!0,this._dirty=!0,this.effect=new yi(t,()=>{this._dirty||(this._dirty=!0,Or(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=n}get value(){const t=ve(this);return Pr(t),(t._dirty||!t._cacheable)&&(t._dirty=!1,t._value=t.effect.run()),t._value}set value(t){this._setter(t)}}function Ga(e,t,l=!1){let n,i;const o=re(e);return o?(n=e,i=st):(n=e.get,i=e.set),new Wa(n,i,o||!i,l)}function At(e,t,l,n){let i;try{i=n?e(...n):e()}catch(o){Vl(o,t,l)}return i}function lt(e,t,l,n){if(re(e)){const o=At(e,t,l,n);return o&&fr(o)&&o.catch(r=>{Vl(r,t,l)}),o}const i=[];for(let o=0;o>>1;Sl(Ge[n])pt&&Ge.splice(t,1)}function Dr(e,t,l,n){te(e)?l.push(...e):(!t||!t.includes(e,e.allowRecurse?n+1:n))&&l.push(e),zr()}function Za(e){Dr(e,El,Rl,nl)}function Xa(e){Dr(e,wt,wl,il)}function Rn(e,t=null){if(Rl.length){for(Xn=t,El=[...new Set(Rl)],Rl.length=0,nl=0;nlSl(l)-Sl(n)),il=0;ile.id==null?1/0:e.id;function Mr(e){Zn=!1,sn=!0,Rn(e),Ge.sort((l,n)=>Sl(l)-Sl(n));const t=st;try{for(pt=0;ptp.trim())),h&&(i=l.map(gr))}let s,a=n[s=Fn(t)]||n[s=Fn(ht(t))];!a&&o&&(a=n[s=Fn(Zt(t))]),a&<(a,e,6,i);const c=n[s+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,lt(c,e,6,i)}}function Nr(e,t,l=!1){const n=t.emitsCache,i=n.get(e);if(i!==void 0)return i;const o=e.emits;let r={},s=!1;if(!re(e)){const a=c=>{const u=Nr(c,t,!0);u&&(s=!0,Ne(r,u))};!l&&t.mixins.length&&t.mixins.forEach(a),e.extends&&a(e.extends),e.mixins&&e.mixins.forEach(a)}return!o&&!s?(n.set(e,null),null):(te(o)?o.forEach(a=>r[a]=null):Ne(r,o),n.set(e,r),r)}function wn(e,t){return!e||!$l(t)?!1:(t=t.slice(2).replace(/Once$/,""),de(e,t[0].toLowerCase()+t.slice(1))||de(e,Zt(t))||de(e,t))}let $e=null,$r=null;function cn(e){const t=$e;return $e=e,$r=e&&e.type.__scopeId||null,t}function Me(e,t=$e,l){if(!t||e._n)return e;const n=(...i)=>{n._d&&fo(-1);const o=cn(t),r=e(...i);return cn(o),n._d&&fo(1),r};return n._n=!0,n._c=!0,n._d=!0,n}function zn(e){const{type:t,vnode:l,proxy:n,withProxy:i,props:o,propsOptions:[r],slots:s,attrs:a,emit:c,render:u,renderCache:h,data:f,setupState:p,ctx:k,inheritAttrs:R}=e;let x,g;const b=cn(e);try{if(l.shapeFlag&4){const D=i||n;x=it(u.call(D,D,h,o,p,f,k)),g=a}else{const D=t;x=it(D.length>1?D(o,{attrs:a,slots:s,emit:c}):D(o,null)),g=t.props?a:tc(a)}}catch(D){Ll.length=0,Vl(D,e,1),x=ie(Qe)}let w=x;if(g&&R!==!1){const D=Object.keys(g),{shapeFlag:q}=w;D.length&&q&7&&(r&&D.some(pi)&&(g=lc(g,r)),w=zt(w,g))}return l.dirs&&(w=zt(w),w.dirs=w.dirs?w.dirs.concat(l.dirs):l.dirs),l.transition&&(w.transition=l.transition),x=w,cn(b),x}const tc=e=>{let t;for(const l in e)(l==="class"||l==="style"||$l(l))&&((t||(t={}))[l]=e[l]);return t},lc=(e,t)=>{const l={};for(const n in e)(!pi(n)||!(n.slice(9)in t))&&(l[n]=e[n]);return l};function nc(e,t,l){const{props:n,children:i,component:o}=e,{props:r,children:s,patchFlag:a}=t,c=o.emitsOptions;if(t.dirs||t.transition)return!0;if(l&&a>=0){if(a&1024)return!0;if(a&16)return n?lo(n,r,c):!!r;if(a&8){const u=t.dynamicProps;for(let h=0;he.__isSuspense;function Vr(e,t){t&&t.pendingBranch?te(e)?t.effects.push(...e):t.effects.push(e):Xa(e)}function Qt(e,t){if(Fe){let l=Fe.provides;const n=Fe.parent&&Fe.parent.provides;n===l&&(l=Fe.provides=Object.create(n)),l[e]=t}}function De(e,t,l=!1){const n=Fe||$e;if(n){const i=n.parent==null?n.vnode.appContext&&n.vnode.appContext.provides:n.parent.provides;if(i&&e in i)return i[e];if(arguments.length>1)return l&&re(t)?t.call(n.proxy):t}}const no={};function dt(e,t,l){return Hr(e,t,l)}function Hr(e,t,{immediate:l,deep:n,flush:i,onTrack:o,onTrigger:r}=Ce){const s=Fe;let a,c=!1,u=!1;if(ze(e)?(a=()=>e.value,c=Jn(e)):al(e)?(a=()=>e,n=!0):te(e)?(u=!0,c=e.some(g=>al(g)||Jn(g)),a=()=>e.map(g=>{if(ze(g))return g.value;if(al(g))return Gt(g);if(re(g))return At(g,s,2)})):re(e)?t?a=()=>At(e,s,2):a=()=>{if(!(s&&s.isUnmounted))return h&&h(),lt(e,s,3,[f])}:a=st,t&&n){const g=a;a=()=>Gt(g())}let h,f=g=>{h=x.onStop=()=>{At(g,s,4)}};if(dl)return f=st,t?l&<(t,s,3,[a(),u?[]:void 0,f]):a(),st;let p=u?[]:no;const k=()=>{if(!!x.active)if(t){const g=x.run();(n||c||(u?g.some((b,w)=>Al(b,p[w])):Al(g,p)))&&(h&&h(),lt(t,s,3,[g,p===no?void 0:p,f]),p=g)}else x.run()};k.allowRecurse=!!t;let R;i==="sync"?R=k:i==="post"?R=()=>Ue(k,s&&s.suspense):R=()=>Za(k);const x=new yi(a,R);return t?l?k():p=x.run():i==="post"?Ue(x.run.bind(x),s&&s.suspense):x.run(),()=>{x.stop(),s&&s.scope&&gi(s.scope.effects,x)}}function rc(e,t,l){const n=this.proxy,i=_e(e)?e.includes(".")?jr(n,e):()=>n[e]:e.bind(n,n);let o;re(t)?o=t:(o=t.handler,l=t);const r=Fe;ul(this);const s=Hr(i,o.bind(n),l);return r?ul(r):Jt(),s}function jr(e,t){const l=t.split(".");return()=>{let n=e;for(let i=0;i{Gt(l,t)});else if(pr(e))for(const l in e)Gt(e[l],t);return e}function sc(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ze(()=>{e.isMounted=!0}),Bl(()=>{e.isUnmounting=!0}),e}const et=[Function,Array],ac={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:et,onEnter:et,onAfterEnter:et,onEnterCancelled:et,onBeforeLeave:et,onLeave:et,onAfterLeave:et,onLeaveCancelled:et,onBeforeAppear:et,onAppear:et,onAfterAppear:et,onAppearCancelled:et},setup(e,{slots:t}){const l=Ai(),n=sc();let i;return()=>{const o=t.default&&qr(t.default(),!0);if(!o||!o.length)return;let r=o[0];if(o.length>1){for(const R of o)if(R.type!==Qe){r=R;break}}const s=ve(e),{mode:a}=s;if(n.isLeaving)return Dn(r);const c=io(r);if(!c)return Dn(r);const u=ei(c,s,n,l);ti(c,u);const h=l.subTree,f=h&&io(h);let p=!1;const{getTransitionKey:k}=c.type;if(k){const R=k();i===void 0?i=R:R!==i&&(i=R,p=!0)}if(f&&f.type!==Qe&&(!Kt(c,f)||p)){const R=ei(f,s,n,l);if(ti(f,R),a==="out-in")return n.isLeaving=!0,R.afterLeave=()=>{n.isLeaving=!1,l.update()},Dn(r);a==="in-out"&&c.type!==Qe&&(R.delayLeave=(x,g,b)=>{const w=Ur(n,f);w[String(f.key)]=f,x._leaveCb=()=>{g(),x._leaveCb=void 0,delete u.delayedLeave},u.delayedLeave=b})}return r}}},Br=ac;function Ur(e,t){const{leavingVNodes:l}=e;let n=l.get(t.type);return n||(n=Object.create(null),l.set(t.type,n)),n}function ei(e,t,l,n){const{appear:i,mode:o,persisted:r=!1,onBeforeEnter:s,onEnter:a,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:h,onLeave:f,onAfterLeave:p,onLeaveCancelled:k,onBeforeAppear:R,onAppear:x,onAfterAppear:g,onAppearCancelled:b}=t,w=String(e.key),D=Ur(l,e),q=(v,G)=>{v&<(v,n,9,G)},ee=(v,G)=>{const U=G[1];q(v,G),te(v)?v.every(Q=>Q.length<=1)&&U():v.length<=1&&U()},O={mode:o,persisted:r,beforeEnter(v){let G=s;if(!l.isMounted)if(i)G=R||s;else return;v._leaveCb&&v._leaveCb(!0);const U=D[w];U&&Kt(e,U)&&U.el._leaveCb&&U.el._leaveCb(),q(G,[v])},enter(v){let G=a,U=c,Q=u;if(!l.isMounted)if(i)G=x||a,U=g||c,Q=b||u;else return;let E=!1;const M=v._enterCb=I=>{E||(E=!0,I?q(Q,[v]):q(U,[v]),O.delayedLeave&&O.delayedLeave(),v._enterCb=void 0)};G?ee(G,[v,M]):M()},leave(v,G){const U=String(e.key);if(v._enterCb&&v._enterCb(!0),l.isUnmounting)return G();q(h,[v]);let Q=!1;const E=v._leaveCb=M=>{Q||(Q=!0,G(),M?q(k,[v]):q(p,[v]),v._leaveCb=void 0,D[U]===e&&delete D[U])};D[U]=e,f?ee(f,[v,E]):E()},clone(v){return ei(v,t,l,n)}};return O}function Dn(e){if(jl(e))return e=zt(e),e.children=null,e}function io(e){return jl(e)?e.children?e.children[0]:void 0:e}function ti(e,t){e.shapeFlag&6&&e.component?ti(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function qr(e,t=!1,l){let n=[],i=0;for(let o=0;o1)for(let o=0;o!!e.type.__asyncLoader;function $(e){re(e)&&(e={loader:e});const{loader:t,loadingComponent:l,errorComponent:n,delay:i=200,timeout:o,suspensible:r=!0,onError:s}=e;let a=null,c,u=0;const h=()=>(u++,a=null,f()),f=()=>{let p;return a||(p=a=t().catch(k=>{if(k=k instanceof Error?k:new Error(String(k)),s)return new Promise((R,x)=>{s(k,()=>R(h()),()=>x(k),u+1)});throw k}).then(k=>p!==a&&a?a:(k&&(k.__esModule||k[Symbol.toStringTag]==="Module")&&(k=k.default),c=k,k)))};return he({name:"AsyncComponentWrapper",__asyncLoader:f,get __asyncResolved(){return c},setup(){const p=Fe;if(c)return()=>Mn(c,p);const k=b=>{a=null,Vl(b,p,13,!n)};if(r&&p.suspense||dl)return f().then(b=>()=>Mn(b,p)).catch(b=>(k(b),()=>n?ie(n,{error:b}):null));const R=ke(!1),x=ke(),g=ke(!!i);return i&&setTimeout(()=>{g.value=!1},i),o!=null&&setTimeout(()=>{if(!R.value&&!x.value){const b=new Error(`Async component timed out after ${o}ms.`);k(b),x.value=b}},o),f().then(()=>{R.value=!0,p.parent&&jl(p.parent.vnode)&&Li(p.parent.update)}).catch(b=>{k(b),x.value=b}),()=>{if(R.value&&c)return Mn(c,p);if(x.value&&n)return ie(n,{error:x.value});if(l&&!g.value)return ie(l)}}})}function Mn(e,{vnode:{ref:t,props:l,children:n,shapeFlag:i},parent:o}){const r=ie(e,l,n);return r.ref=t,r}const jl=e=>e.type.__isKeepAlive;function cc(e,t){Kr(e,"a",t)}function uc(e,t){Kr(e,"da",t)}function Kr(e,t,l=Fe){const n=e.__wdc||(e.__wdc=()=>{let i=l;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Tn(t,n,l),l){let i=l.parent;for(;i&&i.parent;)jl(i.parent.vnode)&&dc(n,t,l,i),i=i.parent}}function dc(e,t,l,n){const i=Tn(t,e,n,!0);Ln(()=>{gi(n[t],i)},l)}function Tn(e,t,l=Fe,n=!1){if(l){const i=l[e]||(l[e]=[]),o=t.__weh||(t.__weh=(...r)=>{if(l.isUnmounted)return;ml(),ul(l);const s=lt(t,l,e,r);return Jt(),pl(),s});return n?i.unshift(o):i.push(o),o}}const kt=e=>(t,l=Fe)=>(!dl||e==="sp")&&Tn(e,t,l),Wr=kt("bm"),Ze=kt("m"),hc=kt("bu"),fc=kt("u"),Bl=kt("bum"),Ln=kt("um"),mc=kt("sp"),pc=kt("rtg"),gc=kt("rtc");function vc(e,t=Fe){Tn("ec",e,t)}function un(e,t){const l=$e;if(l===null)return e;const n=On(l)||l.proxy,i=e.dirs||(e.dirs=[]);for(let o=0;ot(r,s,void 0,o&&o[s]));else{const r=Object.keys(e);i=new Array(r.length);for(let s=0,a=r.length;smn(t)?!(t.type===Qe||t.type===we&&!Yr(t.children)):!0)?e:null}const li=e=>e?ss(e)?On(e)||e.proxy:li(e.parent):null,dn=Ne(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>li(e.parent),$root:e=>li(e.root),$emit:e=>e.emit,$options:e=>Jr(e),$forceUpdate:e=>e.f||(e.f=()=>Li(e.update)),$nextTick:e=>e.n||(e.n=Hl.bind(e.proxy)),$watch:e=>rc.bind(e)}),yc={get({_:e},t){const{ctx:l,setupState:n,data:i,props:o,accessCache:r,type:s,appContext:a}=e;let c;if(t[0]!=="$"){const p=r[t];if(p!==void 0)switch(p){case 1:return n[t];case 2:return i[t];case 4:return l[t];case 3:return o[t]}else{if(n!==Ce&&de(n,t))return r[t]=1,n[t];if(i!==Ce&&de(i,t))return r[t]=2,i[t];if((c=e.propsOptions[0])&&de(c,t))return r[t]=3,o[t];if(l!==Ce&&de(l,t))return r[t]=4,l[t];ni&&(r[t]=0)}}const u=dn[t];let h,f;if(u)return t==="$attrs"&&Je(e,"get",t),u(e);if((h=s.__cssModules)&&(h=h[t]))return h;if(l!==Ce&&de(l,t))return r[t]=4,l[t];if(f=a.config.globalProperties,de(f,t))return f[t]},set({_:e},t,l){const{data:n,setupState:i,ctx:o}=e;return i!==Ce&&de(i,t)?(i[t]=l,!0):n!==Ce&&de(n,t)?(n[t]=l,!0):de(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(o[t]=l,!0)},has({_:{data:e,setupState:t,accessCache:l,ctx:n,appContext:i,propsOptions:o}},r){let s;return!!l[r]||e!==Ce&&de(e,r)||t!==Ce&&de(t,r)||(s=o[0])&&de(s,r)||de(n,r)||de(dn,r)||de(i.config.globalProperties,r)},defineProperty(e,t,l){return l.get!=null?e._.accessCache[t]=0:de(l,"value")&&this.set(e,t,l.value,null),Reflect.defineProperty(e,t,l)}};let ni=!0;function kc(e){const t=Jr(e),l=e.proxy,n=e.ctx;ni=!1,t.beforeCreate&&ro(t.beforeCreate,e,"bc");const{data:i,computed:o,methods:r,watch:s,provide:a,inject:c,created:u,beforeMount:h,mounted:f,beforeUpdate:p,updated:k,activated:R,deactivated:x,beforeDestroy:g,beforeUnmount:b,destroyed:w,unmounted:D,render:q,renderTracked:ee,renderTriggered:O,errorCaptured:v,serverPrefetch:G,expose:U,inheritAttrs:Q,components:E,directives:M,filters:I}=t;if(c&&xc(c,n,null,e.appContext.config.unwrapInjectedRef),r)for(const le in r){const ae=r[le];re(ae)&&(n[le]=ae.bind(l))}if(i){const le=i.call(l,l);Ie(le)&&(e.data=gl(le))}if(ni=!0,o)for(const le in o){const ae=o[le],Oe=re(ae)?ae.bind(l,l):re(ae.get)?ae.get.bind(l,l):st,Ve=!re(ae)&&re(ae.set)?ae.set.bind(l):st,qe=B({get:Oe,set:Ve});Object.defineProperty(n,le,{enumerable:!0,configurable:!0,get:()=>qe.value,set:Xe=>qe.value=Xe})}if(s)for(const le in s)Qr(s[le],n,l,le);if(a){const le=re(a)?a.call(l):a;Reflect.ownKeys(le).forEach(ae=>{Qt(ae,le[ae])})}u&&ro(u,e,"c");function H(le,ae){te(ae)?ae.forEach(Oe=>le(Oe.bind(l))):ae&&le(ae.bind(l))}if(H(Wr,h),H(Ze,f),H(hc,p),H(fc,k),H(cc,R),H(uc,x),H(vc,v),H(gc,ee),H(pc,O),H(Bl,b),H(Ln,D),H(mc,G),te(U))if(U.length){const le=e.exposed||(e.exposed={});U.forEach(ae=>{Object.defineProperty(le,ae,{get:()=>l[ae],set:Oe=>l[ae]=Oe})})}else e.exposed||(e.exposed={});q&&e.render===st&&(e.render=q),Q!=null&&(e.inheritAttrs=Q),E&&(e.components=E),M&&(e.directives=M)}function xc(e,t,l=st,n=!1){te(e)&&(e=ii(e));for(const i in e){const o=e[i];let r;Ie(o)?"default"in o?r=De(o.from||i,o.default,!0):r=De(o.from||i):r=De(o),ze(r)&&n?Object.defineProperty(t,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:s=>r.value=s}):t[i]=r}}function ro(e,t,l){lt(te(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,l)}function Qr(e,t,l,n){const i=n.includes(".")?jr(l,n):()=>l[n];if(_e(e)){const o=t[e];re(o)&&dt(i,o)}else if(re(e))dt(i,e.bind(l));else if(Ie(e))if(te(e))e.forEach(o=>Qr(o,t,l,n));else{const o=re(e.handler)?e.handler.bind(l):t[e.handler];re(o)&&dt(i,o,e)}}function Jr(e){const t=e.type,{mixins:l,extends:n}=t,{mixins:i,optionsCache:o,config:{optionMergeStrategies:r}}=e.appContext,s=o.get(t);let a;return s?a=s:!i.length&&!l&&!n?a=t:(a={},i.length&&i.forEach(c=>hn(a,c,r,!0)),hn(a,t,r)),o.set(t,a),a}function hn(e,t,l,n=!1){const{mixins:i,extends:o}=t;o&&hn(e,o,l,!0),i&&i.forEach(r=>hn(e,r,l,!0));for(const r in t)if(!(n&&r==="expose")){const s=Ec[r]||l&&l[r];e[r]=s?s(e[r],t[r]):t[r]}return e}const Ec={data:so,props:Bt,emits:Bt,methods:Bt,computed:Bt,beforeCreate:He,created:He,beforeMount:He,mounted:He,beforeUpdate:He,updated:He,beforeDestroy:He,beforeUnmount:He,destroyed:He,unmounted:He,activated:He,deactivated:He,errorCaptured:He,serverPrefetch:He,components:Bt,directives:Bt,watch:Rc,provide:so,inject:Cc};function so(e,t){return t?e?function(){return Ne(re(e)?e.call(this,this):e,re(t)?t.call(this,this):t)}:t:e}function Cc(e,t){return Bt(ii(e),ii(t))}function ii(e){if(te(e)){const t={};for(let l=0;l0)&&!(r&16)){if(r&8){const u=e.vnode.dynamicProps;for(let h=0;h{a=!0;const[f,p]=Xr(h,t,!0);Ne(r,f),p&&s.push(...p)};!l&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}if(!o&&!a)return n.set(e,rl),rl;if(te(o))for(let u=0;u-1,p[1]=R<0||k-1||de(p,"default"))&&s.push(h)}}}const c=[r,s];return n.set(e,c),c}function ao(e){return e[0]!=="$"}function co(e){const t=e&&e.toString().match(/^\s*function (\w+)/);return t?t[1]:e===null?"null":""}function uo(e,t){return co(e)===co(t)}function ho(e,t){return te(t)?t.findIndex(l=>uo(l,e)):re(t)&&uo(t,e)?0:-1}const es=e=>e[0]==="_"||e==="$stable",Pi=e=>te(e)?e.map(it):[it(e)],Lc=(e,t,l)=>{if(t._n)return t;const n=Me((...i)=>Pi(t(...i)),l);return n._c=!1,n},ts=(e,t,l)=>{const n=e._ctx;for(const i in e){if(es(i))continue;const o=e[i];if(re(o))t[i]=Lc(i,o,n);else if(o!=null){const r=Pi(o);t[i]=()=>r}}},ls=(e,t)=>{const l=Pi(t);e.slots.default=()=>l},Pc=(e,t)=>{if(e.vnode.shapeFlag&32){const l=t._;l?(e.slots=ve(t),rn(t,"_",l)):ts(t,e.slots={})}else e.slots={},t&&ls(e,t);rn(e.slots,Pn,1)},Oc=(e,t,l)=>{const{vnode:n,slots:i}=e;let o=!0,r=Ce;if(n.shapeFlag&32){const s=t._;s?l&&s===1?o=!1:(Ne(i,t),!l&&s===1&&delete i._):(o=!t.$stable,ts(t,i)),r=t}else t&&(ls(e,t),r={default:1});if(o)for(const s in i)!es(s)&&!(s in r)&&delete i[s]};function ns(){return{app:null,config:{isNativeTag:ra,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Ac=0;function Ic(e,t){return function(n,i=null){re(n)||(n=Object.assign({},n)),i!=null&&!Ie(i)&&(i=null);const o=ns(),r=new Set;let s=!1;const a=o.app={_uid:Ac++,_component:n,_props:i,_container:null,_context:o,_instance:null,version:Jc,get config(){return o.config},set config(c){},use(c,...u){return r.has(c)||(c&&re(c.install)?(r.add(c),c.install(a,...u)):re(c)&&(r.add(c),c(a,...u))),a},mixin(c){return o.mixins.includes(c)||o.mixins.push(c),a},component(c,u){return u?(o.components[c]=u,a):o.components[c]},directive(c,u){return u?(o.directives[c]=u,a):o.directives[c]},mount(c,u,h){if(!s){const f=ie(n,i);return f.appContext=o,u&&t?t(f,c):e(f,c,h),s=!0,a._container=c,c.__vue_app__=a,On(f.component)||f.component.proxy}},unmount(){s&&(e(null,a._container),delete a._container.__vue_app__)},provide(c,u){return o.provides[c]=u,a}};return a}}function fn(e,t,l,n,i=!1){if(te(e)){e.forEach((f,p)=>fn(f,t&&(te(t)?t[p]:t),l,n,i));return}if(cl(n)&&!i)return;const o=n.shapeFlag&4?On(n.component)||n.component.proxy:n.el,r=i?null:o,{i:s,r:a}=e,c=t&&t.r,u=s.refs===Ce?s.refs={}:s.refs,h=s.setupState;if(c!=null&&c!==a&&(_e(c)?(u[c]=null,de(h,c)&&(h[c]=null)):ze(c)&&(c.value=null)),re(a))At(a,s,12,[r,u]);else{const f=_e(a),p=ze(a);if(f||p){const k=()=>{if(e.f){const R=f?u[a]:a.value;i?te(R)&&gi(R,o):te(R)?R.includes(o)||R.push(o):f?(u[a]=[o],de(h,a)&&(h[a]=u[a])):(a.value=[o],e.k&&(u[e.k]=a.value))}else f?(u[a]=r,de(h,a)&&(h[a]=r)):p&&(a.value=r,e.k&&(u[e.k]=r))};r?(k.id=-1,Ue(k,l)):k()}}}let Et=!1;const Zl=e=>/svg/.test(e.namespaceURI)&&e.tagName!=="foreignObject",Xl=e=>e.nodeType===8;function Fc(e){const{mt:t,p:l,o:{patchProp:n,createText:i,nextSibling:o,parentNode:r,remove:s,insert:a,createComment:c}}=e,u=(g,b)=>{if(!b.hasChildNodes()){l(null,g,b),an(),b._vnode=g;return}Et=!1,h(b.firstChild,g,null,null,null),an(),b._vnode=g,Et&&console.error("Hydration completed but contains mismatches.")},h=(g,b,w,D,q,ee=!1)=>{const O=Xl(g)&&g.data==="[",v=()=>R(g,b,w,D,q,O),{type:G,ref:U,shapeFlag:Q,patchFlag:E}=b,M=g.nodeType;b.el=g,E===-2&&(ee=!1,b.dynamicChildren=null);let I=null;switch(G){case zl:M!==3?b.children===""?(a(b.el=i(""),r(g),g),I=g):I=v():(g.data!==b.children&&(Et=!0,g.data=b.children),I=o(g));break;case Qe:M!==8||O?I=v():I=o(g);break;case Tl:if(M!==1&&M!==3)I=v();else{I=g;const se=!b.children.length;for(let H=0;H{ee=ee||!!b.dynamicChildren;const{type:O,props:v,patchFlag:G,shapeFlag:U,dirs:Q}=b,E=O==="input"&&Q||O==="option";if(E||G!==-1){if(Q&&ut(b,null,w,"created"),v)if(E||!ee||G&48)for(const I in v)(E&&I.endsWith("value")||$l(I)&&!Cl(I))&&n(g,I,null,v[I],!1,void 0,w);else v.onClick&&n(g,"onClick",null,v.onClick,!1,void 0,w);let M;if((M=v&&v.onVnodeBeforeMount)&&tt(M,w,b),Q&&ut(b,null,w,"beforeMount"),((M=v&&v.onVnodeMounted)||Q)&&Vr(()=>{M&&tt(M,w,b),Q&&ut(b,null,w,"mounted")},D),U&16&&!(v&&(v.innerHTML||v.textContent))){let I=p(g.firstChild,b,g,w,D,q,ee);for(;I;){Et=!0;const se=I;I=I.nextSibling,s(se)}}else U&8&&g.textContent!==b.children&&(Et=!0,g.textContent=b.children)}return g.nextSibling},p=(g,b,w,D,q,ee,O)=>{O=O||!!b.dynamicChildren;const v=b.children,G=v.length;for(let U=0;U{const{slotScopeIds:O}=b;O&&(q=q?q.concat(O):O);const v=r(g),G=p(o(g),b,v,w,D,q,ee);return G&&Xl(G)&&G.data==="]"?o(b.anchor=G):(Et=!0,a(b.anchor=c("]"),v,G),G)},R=(g,b,w,D,q,ee)=>{if(Et=!0,b.el=null,ee){const G=x(g);for(;;){const U=o(g);if(U&&U!==G)s(U);else break}}const O=o(g),v=r(g);return s(g),l(null,b,v,O,w,D,Zl(v),q),O},x=g=>{let b=0;for(;g;)if(g=o(g),g&&Xl(g)&&(g.data==="["&&b++,g.data==="]")){if(b===0)return o(g);b--}return g};return[u,h]}const Ue=Vr;function Sc(e){return zc(e,Fc)}function zc(e,t){const l=ha();l.__VUE__=!0;const{insert:n,remove:i,patchProp:o,createElement:r,createText:s,createComment:a,setText:c,setElementText:u,parentNode:h,nextSibling:f,setScopeId:p=st,cloneNode:k,insertStaticContent:R}=e,x=(d,m,y,L=null,T=null,F=null,j=!1,S=null,N=!!m.dynamicChildren)=>{if(d===m)return;d&&!Kt(d,m)&&(L=W(d),Be(d,T,F,!0),d=null),m.patchFlag===-2&&(N=!1,m.dynamicChildren=null);const{type:P,ref:J,shapeFlag:Y}=m;switch(P){case zl:g(d,m,y,L);break;case Qe:b(d,m,y,L);break;case Tl:d==null&&w(m,y,L,j);break;case we:M(d,m,y,L,T,F,j,S,N);break;default:Y&1?ee(d,m,y,L,T,F,j,S,N):Y&6?I(d,m,y,L,T,F,j,S,N):(Y&64||Y&128)&&P.process(d,m,y,L,T,F,j,S,N,ye)}J!=null&&T&&fn(J,d&&d.ref,F,m||d,!m)},g=(d,m,y,L)=>{if(d==null)n(m.el=s(m.children),y,L);else{const T=m.el=d.el;m.children!==d.children&&c(T,m.children)}},b=(d,m,y,L)=>{d==null?n(m.el=a(m.children||""),y,L):m.el=d.el},w=(d,m,y,L)=>{[d.el,d.anchor]=R(d.children,m,y,L,d.el,d.anchor)},D=({el:d,anchor:m},y,L)=>{let T;for(;d&&d!==m;)T=f(d),n(d,y,L),d=T;n(m,y,L)},q=({el:d,anchor:m})=>{let y;for(;d&&d!==m;)y=f(d),i(d),d=y;i(m)},ee=(d,m,y,L,T,F,j,S,N)=>{j=j||m.type==="svg",d==null?O(m,y,L,T,F,j,S,N):U(d,m,T,F,j,S,N)},O=(d,m,y,L,T,F,j,S)=>{let N,P;const{type:J,props:Y,shapeFlag:Z,transition:oe,patchFlag:fe,dirs:xe}=d;if(d.el&&k!==void 0&&fe===-1)N=d.el=k(d.el);else{if(N=d.el=r(d.type,F,Y&&Y.is,Y),Z&8?u(N,d.children):Z&16&&G(d.children,N,null,L,T,F&&J!=="foreignObject",j,S),xe&&ut(d,null,L,"created"),Y){for(const Te in Y)Te!=="value"&&!Cl(Te)&&o(N,Te,null,Y[Te],F,d.children,L,T,z);"value"in Y&&o(N,"value",null,Y.value),(P=Y.onVnodeBeforeMount)&&tt(P,L,d)}v(N,d,d.scopeId,j,L)}xe&&ut(d,null,L,"beforeMount");const Ee=(!T||T&&!T.pendingBranch)&&oe&&!oe.persisted;Ee&&oe.beforeEnter(N),n(N,m,y),((P=Y&&Y.onVnodeMounted)||Ee||xe)&&Ue(()=>{P&&tt(P,L,d),Ee&&oe.enter(N),xe&&ut(d,null,L,"mounted")},T)},v=(d,m,y,L,T)=>{if(y&&p(d,y),L)for(let F=0;F{for(let P=N;P{const S=m.el=d.el;let{patchFlag:N,dynamicChildren:P,dirs:J}=m;N|=d.patchFlag&16;const Y=d.props||Ce,Z=m.props||Ce;let oe;y&&Vt(y,!1),(oe=Z.onVnodeBeforeUpdate)&&tt(oe,y,m,d),J&&ut(m,d,y,"beforeUpdate"),y&&Vt(y,!0);const fe=T&&m.type!=="foreignObject";if(P?Q(d.dynamicChildren,P,S,y,L,fe,F):j||Oe(d,m,S,null,y,L,fe,F,!1),N>0){if(N&16)E(S,m,Y,Z,y,L,T);else if(N&2&&Y.class!==Z.class&&o(S,"class",null,Z.class,T),N&4&&o(S,"style",Y.style,Z.style,T),N&8){const xe=m.dynamicProps;for(let Ee=0;Ee{oe&&tt(oe,y,m,d),J&&ut(m,d,y,"updated")},L)},Q=(d,m,y,L,T,F,j)=>{for(let S=0;S{if(y!==L){for(const S in L){if(Cl(S))continue;const N=L[S],P=y[S];N!==P&&S!=="value"&&o(d,S,P,N,j,m.children,T,F,z)}if(y!==Ce)for(const S in y)!Cl(S)&&!(S in L)&&o(d,S,y[S],null,j,m.children,T,F,z);"value"in L&&o(d,"value",y.value,L.value)}},M=(d,m,y,L,T,F,j,S,N)=>{const P=m.el=d?d.el:s(""),J=m.anchor=d?d.anchor:s("");let{patchFlag:Y,dynamicChildren:Z,slotScopeIds:oe}=m;oe&&(S=S?S.concat(oe):oe),d==null?(n(P,y,L),n(J,y,L),G(m.children,y,J,T,F,j,S,N)):Y>0&&Y&64&&Z&&d.dynamicChildren?(Q(d.dynamicChildren,Z,y,T,F,j,S),(m.key!=null||T&&m===T.subTree)&&is(d,m,!0)):Oe(d,m,y,J,T,F,j,S,N)},I=(d,m,y,L,T,F,j,S,N)=>{m.slotScopeIds=S,d==null?m.shapeFlag&512?T.ctx.activate(m,y,L,j,N):se(m,y,L,T,F,j,N):H(d,m,N)},se=(d,m,y,L,T,F,j)=>{const S=d.component=Uc(d,L,T);if(jl(d)&&(S.ctx.renderer=ye),qc(S),S.asyncDep){if(T&&T.registerDep(S,le),!d.el){const N=S.subTree=ie(Qe);b(null,N,m,y)}return}le(S,d,m,y,T,F,j)},H=(d,m,y)=>{const L=m.component=d.component;if(nc(d,m,y))if(L.asyncDep&&!L.asyncResolved){ae(L,m,y);return}else L.next=m,Ja(L.update),L.update();else m.el=d.el,L.vnode=m},le=(d,m,y,L,T,F,j)=>{const S=()=>{if(d.isMounted){let{next:J,bu:Y,u:Z,parent:oe,vnode:fe}=d,xe=J,Ee;Vt(d,!1),J?(J.el=fe.el,ae(d,J,j)):J=fe,Y&&Sn(Y),(Ee=J.props&&J.props.onVnodeBeforeUpdate)&&tt(Ee,oe,J,fe),Vt(d,!0);const Te=zn(d),nt=d.subTree;d.subTree=Te,x(nt,Te,h(nt.el),W(nt),d,T,F),J.el=Te.el,xe===null&&ic(d,Te.el),Z&&Ue(Z,T),(Ee=J.props&&J.props.onVnodeUpdated)&&Ue(()=>tt(Ee,oe,J,fe),T)}else{let J;const{el:Y,props:Z}=m,{bm:oe,m:fe,parent:xe}=d,Ee=cl(m);if(Vt(d,!1),oe&&Sn(oe),!Ee&&(J=Z&&Z.onVnodeBeforeMount)&&tt(J,xe,m),Vt(d,!0),Y&&ne){const Te=()=>{d.subTree=zn(d),ne(Y,d.subTree,d,T,null)};Ee?m.type.__asyncLoader().then(()=>!d.isUnmounted&&Te()):Te()}else{const Te=d.subTree=zn(d);x(null,Te,y,L,d,T,F),m.el=Te.el}if(fe&&Ue(fe,T),!Ee&&(J=Z&&Z.onVnodeMounted)){const Te=m;Ue(()=>tt(J,xe,Te),T)}(m.shapeFlag&256||xe&&cl(xe.vnode)&&xe.vnode.shapeFlag&256)&&d.a&&Ue(d.a,T),d.isMounted=!0,m=y=L=null}},N=d.effect=new yi(S,()=>Li(P),d.scope),P=d.update=()=>N.run();P.id=d.uid,Vt(d,!0),P()},ae=(d,m,y)=>{m.component=d;const L=d.vnode.props;d.vnode=m,d.next=null,Tc(d,m.props,L,y),Oc(d,m.children,y),ml(),Rn(void 0,d.update),pl()},Oe=(d,m,y,L,T,F,j,S,N=!1)=>{const P=d&&d.children,J=d?d.shapeFlag:0,Y=m.children,{patchFlag:Z,shapeFlag:oe}=m;if(Z>0){if(Z&128){qe(P,Y,y,L,T,F,j,S,N);return}else if(Z&256){Ve(P,Y,y,L,T,F,j,S,N);return}}oe&8?(J&16&&z(P,T,F),Y!==P&&u(y,Y)):J&16?oe&16?qe(P,Y,y,L,T,F,j,S,N):z(P,T,F,!0):(J&8&&u(y,""),oe&16&&G(Y,y,L,T,F,j,S,N))},Ve=(d,m,y,L,T,F,j,S,N)=>{d=d||rl,m=m||rl;const P=d.length,J=m.length,Y=Math.min(P,J);let Z;for(Z=0;ZJ?z(d,T,F,!0,!1,Y):G(m,y,L,T,F,j,S,N,Y)},qe=(d,m,y,L,T,F,j,S,N)=>{let P=0;const J=m.length;let Y=d.length-1,Z=J-1;for(;P<=Y&&P<=Z;){const oe=d[P],fe=m[P]=N?Tt(m[P]):it(m[P]);if(Kt(oe,fe))x(oe,fe,y,null,T,F,j,S,N);else break;P++}for(;P<=Y&&P<=Z;){const oe=d[Y],fe=m[Z]=N?Tt(m[Z]):it(m[Z]);if(Kt(oe,fe))x(oe,fe,y,null,T,F,j,S,N);else break;Y--,Z--}if(P>Y){if(P<=Z){const oe=Z+1,fe=oeZ)for(;P<=Y;)Be(d[P],T,F,!0),P++;else{const oe=P,fe=P,xe=new Map;for(P=fe;P<=Z;P++){const Ke=m[P]=N?Tt(m[P]):it(m[P]);Ke.key!=null&&xe.set(Ke.key,P)}let Ee,Te=0;const nt=Z-fe+1;let el=!1,Ui=0;const vl=new Array(nt);for(P=0;P=nt){Be(Ke,T,F,!0);continue}let ct;if(Ke.key!=null)ct=xe.get(Ke.key);else for(Ee=fe;Ee<=Z;Ee++)if(vl[Ee-fe]===0&&Kt(Ke,m[Ee])){ct=Ee;break}ct===void 0?Be(Ke,T,F,!0):(vl[ct-fe]=P+1,ct>=Ui?Ui=ct:el=!0,x(Ke,m[ct],y,null,T,F,j,S,N),Te++)}const qi=el?Dc(vl):rl;for(Ee=qi.length-1,P=nt-1;P>=0;P--){const Ke=fe+P,ct=m[Ke],Ki=Ke+1{const{el:F,type:j,transition:S,children:N,shapeFlag:P}=d;if(P&6){Xe(d.component.subTree,m,y,L);return}if(P&128){d.suspense.move(m,y,L);return}if(P&64){j.move(d,m,y,ye);return}if(j===we){n(F,m,y);for(let Y=0;YS.enter(F),T);else{const{leave:Y,delayLeave:Z,afterLeave:oe}=S,fe=()=>n(F,m,y),xe=()=>{Y(F,()=>{fe(),oe&&oe()})};Z?Z(F,fe,xe):xe()}else n(F,m,y)},Be=(d,m,y,L=!1,T=!1)=>{const{type:F,props:j,ref:S,children:N,dynamicChildren:P,shapeFlag:J,patchFlag:Y,dirs:Z}=d;if(S!=null&&fn(S,null,y,d,!0),J&256){m.ctx.deactivate(d);return}const oe=J&1&&Z,fe=!cl(d);let xe;if(fe&&(xe=j&&j.onVnodeBeforeUnmount)&&tt(xe,m,d),J&6)K(d.component,y,L);else{if(J&128){d.suspense.unmount(y,L);return}oe&&ut(d,null,m,"beforeUnmount"),J&64?d.type.remove(d,m,y,T,ye,L):P&&(F!==we||Y>0&&Y&64)?z(P,m,y,!1,!0):(F===we&&Y&384||!T&&J&16)&&z(N,m,y),L&&$t(d)}(fe&&(xe=j&&j.onVnodeUnmounted)||oe)&&Ue(()=>{xe&&tt(xe,m,d),oe&&ut(d,null,m,"unmounted")},y)},$t=d=>{const{type:m,el:y,anchor:L,transition:T}=d;if(m===we){C(y,L);return}if(m===Tl){q(d);return}const F=()=>{i(y),T&&!T.persisted&&T.afterLeave&&T.afterLeave()};if(d.shapeFlag&1&&T&&!T.persisted){const{leave:j,delayLeave:S}=T,N=()=>j(y,F);S?S(d.el,F,N):N()}else F()},C=(d,m)=>{let y;for(;d!==m;)y=f(d),i(d),d=y;i(m)},K=(d,m,y)=>{const{bum:L,scope:T,update:F,subTree:j,um:S}=d;L&&Sn(L),T.stop(),F&&(F.active=!1,Be(j,d,m,y)),S&&Ue(S,m),Ue(()=>{d.isUnmounted=!0},m),m&&m.pendingBranch&&!m.isUnmounted&&d.asyncDep&&!d.asyncResolved&&d.suspenseId===m.pendingId&&(m.deps--,m.deps===0&&m.resolve())},z=(d,m,y,L=!1,T=!1,F=0)=>{for(let j=F;jd.shapeFlag&6?W(d.component.subTree):d.shapeFlag&128?d.suspense.next():f(d.anchor||d.el),ge=(d,m,y)=>{d==null?m._vnode&&Be(m._vnode,null,null,!0):x(m._vnode||null,d,m,null,null,null,y),an(),m._vnode=d},ye={p:x,um:Be,m:Xe,r:$t,mt:se,mc:G,pc:Oe,pbc:Q,n:W,o:e};let ce,ne;return t&&([ce,ne]=t(ye)),{render:ge,hydrate:ce,createApp:Ic(ge,ce)}}function Vt({effect:e,update:t},l){e.allowRecurse=t.allowRecurse=l}function is(e,t,l=!1){const n=e.children,i=t.children;if(te(n)&&te(i))for(let o=0;o>1,e[l[s]]0&&(t[n]=l[o-1]),l[o]=n)}}for(o=l.length,r=l[o-1];o-- >0;)l[o]=r,r=t[r];return l}const Mc=e=>e.__isTeleport,we=Symbol(void 0),zl=Symbol(void 0),Qe=Symbol(void 0),Tl=Symbol(void 0),Ll=[];let rt=null;function V(e=!1){Ll.push(rt=e?null:[])}function Nc(){Ll.pop(),rt=Ll[Ll.length-1]||null}let Dl=1;function fo(e){Dl+=e}function os(e){return e.dynamicChildren=Dl>0?rt||rl:null,Nc(),Dl>0&&rt&&rt.push(e),e}function X(e,t,l,n,i,o){return os(pe(e,t,l,n,i,o,!0))}function Ae(e,t,l,n,i){return os(ie(e,t,l,n,i,!0))}function mn(e){return e?e.__v_isVNode===!0:!1}function Kt(e,t){return e.type===t.type&&e.key===t.key}const Pn="__vInternal",rs=({key:e})=>e!=null?e:null,ln=({ref:e,ref_key:t,ref_for:l})=>e!=null?_e(e)||ze(e)||re(e)?{i:$e,r:e,k:t,f:!!l}:e:null;function pe(e,t=null,l=null,n=0,i=null,o=e===we?0:1,r=!1,s=!1){const a={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&rs(t),ref:t&&ln(t),scopeId:$r,slotScopeIds:null,children:l,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null};return s?(Oi(a,l),o&128&&e.normalize(a)):l&&(a.shapeFlag|=_e(l)?8:16),Dl>0&&!r&&rt&&(a.patchFlag>0||o&6)&&a.patchFlag!==32&&rt.push(a),a}const ie=$c;function $c(e,t=null,l=null,n=0,i=null,o=!1){if((!e||e===bc)&&(e=Qe),mn(e)){const s=zt(e,t,!0);return l&&Oi(s,l),Dl>0&&!o&&rt&&(s.shapeFlag&6?rt[rt.indexOf(e)]=s:rt.push(s)),s.patchFlag|=-2,s}if(Qc(e)&&(e=e.__vccOpts),t){t=Vc(t);let{class:s,style:a}=t;s&&!_e(s)&&(t.class=Ye(s)),Ie(a)&&(Tr(a)&&!te(a)&&(a=Ne({},a)),t.style=Nl(a))}const r=_e(e)?1:oc(e)?128:Mc(e)?64:Ie(e)?4:re(e)?2:0;return pe(e,t,l,n,i,r,o,!0)}function Vc(e){return e?Tr(e)||Pn in e?Ne({},e):e:null}function zt(e,t,l=!1){const{props:n,ref:i,patchFlag:o,children:r}=e,s=t?ri(n||{},t):n;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&rs(s),ref:t&&t.ref?l&&i?te(i)?i.concat(ln(t)):[i,ln(t)]:ln(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:r,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==we?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&zt(e.ssContent),ssFallback:e.ssFallback&&zt(e.ssFallback),el:e.el,anchor:e.anchor}}function Dt(e=" ",t=0){return ie(zl,null,e,t)}function Hc(e,t){const l=ie(Tl,null,e);return l.staticCount=t,l}function Pe(e="",t=!1){return t?(V(),Ae(Qe,null,e)):ie(Qe,null,e)}function it(e){return e==null||typeof e=="boolean"?ie(Qe):te(e)?ie(we,null,e.slice()):typeof e=="object"?Tt(e):ie(zl,null,String(e))}function Tt(e){return e.el===null||e.memo?e:zt(e)}function Oi(e,t){let l=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(te(t))l=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),Oi(e,i()),i._c&&(i._d=!0));return}else{l=32;const i=t._;!i&&!(Pn in t)?t._ctx=$e:i===3&&$e&&($e.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else re(t)?(t={default:t,_ctx:$e},l=32):(t=String(t),n&64?(l=16,t=[Dt(t)]):l=8);e.children=t,e.shapeFlag|=l}function ri(...e){const t={};for(let l=0;lFe||$e,ul=e=>{Fe=e,e.scope.on()},Jt=()=>{Fe&&Fe.scope.off(),Fe=null};function ss(e){return e.vnode.shapeFlag&4}let dl=!1;function qc(e,t=!1){dl=t;const{props:l,children:n}=e.vnode,i=ss(e);wc(e,l,i,t),Pc(e,n);const o=i?Kc(e,t):void 0;return dl=!1,o}function Kc(e,t){const l=e.type;e.accessCache=Object.create(null),e.proxy=Lr(new Proxy(e.ctx,yc));const{setup:n}=l;if(n){const i=e.setupContext=n.length>1?Gc(e):null;ul(e),ml();const o=At(n,e,0,[e.props,i]);if(pl(),Jt(),fr(o)){if(o.then(Jt,Jt),t)return o.then(r=>{mo(e,r,t)}).catch(r=>{Vl(r,e,0)});e.asyncDep=o}else mo(e,o,t)}else as(e,t)}function mo(e,t,l){re(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ie(t)&&(e.setupState=Fr(t)),as(e,l)}let po;function as(e,t,l){const n=e.type;if(!e.render){if(!t&&po&&!n.render){const i=n.template;if(i){const{isCustomElement:o,compilerOptions:r}=e.appContext.config,{delimiters:s,compilerOptions:a}=n,c=Ne(Ne({isCustomElement:o,delimiters:s},r),a);n.render=po(i,c)}}e.render=n.render||st}ul(e),ml(),kc(e),pl(),Jt()}function Wc(e){return new Proxy(e.attrs,{get(t,l){return Je(e,"get","$attrs"),t[l]}})}function Gc(e){const t=n=>{e.exposed=n||{}};let l;return{get attrs(){return l||(l=Wc(e))},slots:e.slots,emit:e.emit,expose:t}}function On(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(Fr(Lr(e.exposed)),{get(t,l){if(l in t)return t[l];if(l in dn)return dn[l](e)}}))}function Yc(e,t=!0){return re(e)?e.displayName||e.name:e.name||t&&e.__name}function Qc(e){return re(e)&&"__vccOpts"in e}const B=(e,t)=>Ga(e,t,dl);function ue(e,t,l){const n=arguments.length;return n===2?Ie(t)&&!te(t)?mn(t)?ie(e,null,[t]):ie(e,t):ie(e,null,t):(n>3?l=Array.prototype.slice.call(arguments,2):n===3&&mn(l)&&(l=[l]),ie(e,t,l))}const Jc="3.2.37",Zc="http://www.w3.org/2000/svg",Wt=typeof document<"u"?document:null,go=Wt&&Wt.createElement("template"),Xc={insert:(e,t,l)=>{t.insertBefore(e,l||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,l,n)=>{const i=t?Wt.createElementNS(Zc,e):Wt.createElement(e,l?{is:l}:void 0);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Wt.createTextNode(e),createComment:e=>Wt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Wt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},cloneNode(e){const t=e.cloneNode(!0);return"_value"in e&&(t._value=e._value),t},insertStaticContent(e,t,l,n,i,o){const r=l?l.previousSibling:t.lastChild;if(i&&(i===o||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),l),!(i===o||!(i=i.nextSibling)););else{go.innerHTML=n?`${e}`:e;const s=go.content;if(n){const a=s.firstChild;for(;a.firstChild;)s.appendChild(a.firstChild);s.removeChild(a)}t.insertBefore(s,l)}return[r?r.nextSibling:t.firstChild,l?l.previousSibling:t.lastChild]}};function eu(e,t,l){const n=e._vtc;n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):l?e.setAttribute("class",t):e.className=t}function tu(e,t,l){const n=e.style,i=_e(l);if(l&&!i){for(const o in l)si(n,o,l[o]);if(t&&!_e(t))for(const o in t)l[o]==null&&si(n,o,"")}else{const o=n.display;i?t!==l&&(n.cssText=l):t&&e.removeAttribute("style"),"_vod"in e&&(n.display=o)}}const vo=/\s*!important$/;function si(e,t,l){if(te(l))l.forEach(n=>si(e,t,n));else if(l==null&&(l=""),t.startsWith("--"))e.setProperty(t,l);else{const n=lu(e,t);vo.test(l)?e.setProperty(Zt(n),l.replace(vo,""),"important"):e[n]=l}}const bo=["Webkit","Moz","ms"],Nn={};function lu(e,t){const l=Nn[t];if(l)return l;let n=ht(t);if(n!=="filter"&&n in e)return Nn[t]=n;n=xn(n);for(let i=0;i{let e=Date.now,t=!1;if(typeof window<"u"){Date.now()>document.createEvent("Event").timeStamp&&(e=performance.now.bind(performance));const l=navigator.userAgent.match(/firefox\/(\d+)/i);t=!!(l&&Number(l[1])<=53)}return[e,t]})();let ai=0;const ru=Promise.resolve(),su=()=>{ai=0},au=()=>ai||(ru.then(su),ai=cs());function cu(e,t,l,n){e.addEventListener(t,l,n)}function uu(e,t,l,n){e.removeEventListener(t,l,n)}function du(e,t,l,n,i=null){const o=e._vei||(e._vei={}),r=o[t];if(n&&r)r.value=n;else{const[s,a]=hu(t);if(n){const c=o[t]=fu(n,i);cu(e,s,c,a)}else r&&(uu(e,s,r,a),o[t]=void 0)}}const yo=/(?:Once|Passive|Capture)$/;function hu(e){let t;if(yo.test(e)){t={};let l;for(;l=e.match(yo);)e=e.slice(0,e.length-l[0].length),t[l[0].toLowerCase()]=!0}return[Zt(e.slice(2)),t]}function fu(e,t){const l=n=>{const i=n.timeStamp||cs();(ou||i>=l.attached-1)&<(mu(n,l.value),t,5,[n])};return l.value=e,l.attached=au(),l}function mu(e,t){if(te(t)){const l=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{l.call(e),e._stopped=!0},t.map(n=>i=>!i._stopped&&n&&n(i))}else return t}const ko=/^on[a-z]/,pu=(e,t,l,n,i=!1,o,r,s,a)=>{t==="class"?eu(e,n,i):t==="style"?tu(e,l,n):$l(t)?pi(t)||du(e,t,l,n,r):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):gu(e,t,n,i))?iu(e,t,n,o,r,s,a):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),nu(e,t,n,i))};function gu(e,t,l,n){return n?!!(t==="innerHTML"||t==="textContent"||t in e&&ko.test(t)&&re(l)):t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA"||ko.test(t)&&_e(l)?!1:t in e}const Ct="transition",bl="animation",Ul=(e,{slots:t})=>ue(Br,vu(e),t);Ul.displayName="Transition";const us={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String};Ul.props=Ne({},Br.props,us);const Ht=(e,t=[])=>{te(e)?e.forEach(l=>l(...t)):e&&e(...t)},xo=e=>e?te(e)?e.some(t=>t.length>1):e.length>1:!1;function vu(e){const t={};for(const E in e)E in us||(t[E]=e[E]);if(e.css===!1)return t;const{name:l="v",type:n,duration:i,enterFromClass:o=`${l}-enter-from`,enterActiveClass:r=`${l}-enter-active`,enterToClass:s=`${l}-enter-to`,appearFromClass:a=o,appearActiveClass:c=r,appearToClass:u=s,leaveFromClass:h=`${l}-leave-from`,leaveActiveClass:f=`${l}-leave-active`,leaveToClass:p=`${l}-leave-to`}=e,k=bu(i),R=k&&k[0],x=k&&k[1],{onBeforeEnter:g,onEnter:b,onEnterCancelled:w,onLeave:D,onLeaveCancelled:q,onBeforeAppear:ee=g,onAppear:O=b,onAppearCancelled:v=w}=t,G=(E,M,I)=>{jt(E,M?u:s),jt(E,M?c:r),I&&I()},U=(E,M)=>{E._isLeaving=!1,jt(E,h),jt(E,p),jt(E,f),M&&M()},Q=E=>(M,I)=>{const se=E?O:b,H=()=>G(M,E,I);Ht(se,[M,H]),Eo(()=>{jt(M,E?a:o),Rt(M,E?u:s),xo(se)||Co(M,n,R,H)})};return Ne(t,{onBeforeEnter(E){Ht(g,[E]),Rt(E,o),Rt(E,r)},onBeforeAppear(E){Ht(ee,[E]),Rt(E,a),Rt(E,c)},onEnter:Q(!1),onAppear:Q(!0),onLeave(E,M){E._isLeaving=!0;const I=()=>U(E,M);Rt(E,h),ku(),Rt(E,f),Eo(()=>{!E._isLeaving||(jt(E,h),Rt(E,p),xo(D)||Co(E,n,x,I))}),Ht(D,[E,I])},onEnterCancelled(E){G(E,!1),Ht(w,[E])},onAppearCancelled(E){G(E,!0),Ht(v,[E])},onLeaveCancelled(E){U(E),Ht(q,[E])}})}function bu(e){if(e==null)return null;if(Ie(e))return[$n(e.enter),$n(e.leave)];{const t=$n(e);return[t,t]}}function $n(e){return gr(e)}function Rt(e,t){t.split(/\s+/).forEach(l=>l&&e.classList.add(l)),(e._vtc||(e._vtc=new Set)).add(t)}function jt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const{_vtc:l}=e;l&&(l.delete(t),l.size||(e._vtc=void 0))}function Eo(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let _u=0;function Co(e,t,l,n){const i=e._endId=++_u,o=()=>{i===e._endId&&n()};if(l)return setTimeout(o,l);const{type:r,timeout:s,propCount:a}=yu(e,t);if(!r)return n();const c=r+"end";let u=0;const h=()=>{e.removeEventListener(c,f),o()},f=p=>{p.target===e&&++u>=a&&h()};setTimeout(()=>{u(l[k]||"").split(", "),i=n(Ct+"Delay"),o=n(Ct+"Duration"),r=Ro(i,o),s=n(bl+"Delay"),a=n(bl+"Duration"),c=Ro(s,a);let u=null,h=0,f=0;t===Ct?r>0&&(u=Ct,h=r,f=o.length):t===bl?c>0&&(u=bl,h=c,f=a.length):(h=Math.max(r,c),u=h>0?r>c?Ct:bl:null,f=u?u===Ct?o.length:a.length:0);const p=u===Ct&&/\b(transform|all)(,|$)/.test(l[Ct+"Property"]);return{type:u,timeout:h,propCount:f,hasTransform:p}}function Ro(e,t){for(;e.lengthwo(l)+wo(e[n])))}function wo(e){return Number(e.slice(0,-1).replace(",","."))*1e3}function ku(){return document.body.offsetHeight}const xu={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},Eu=(e,t)=>l=>{if(!("key"in l))return;const n=Zt(l.key);if(t.some(i=>i===n||xu[i]===n))return e(l)},pn={beforeMount(e,{value:t},{transition:l}){e._vod=e.style.display==="none"?"":e.style.display,l&&t?l.beforeEnter(e):_l(e,t)},mounted(e,{value:t},{transition:l}){l&&t&&l.enter(e)},updated(e,{value:t,oldValue:l},{transition:n}){!t!=!l&&(n?t?(n.beforeEnter(e),_l(e,!0),n.enter(e)):n.leave(e,()=>{_l(e,!1)}):_l(e,t))},beforeUnmount(e,{value:t}){_l(e,t)}};function _l(e,t){e.style.display=t?e._vod:"none"}const Cu=Ne({patchProp:pu},Xc);let Vn,To=!1;function Ru(){return Vn=To?Vn:Sc(Cu),To=!0,Vn}const wu=(...e)=>{const t=Ru().createApp(...e),{mount:l}=t;return t.mount=n=>{const i=Tu(n);if(i)return l(i,!0,i instanceof SVGElement)},t};function Tu(e){return _e(e)?document.querySelector(e):e}const Lu=JSON.parse('{"base":"/YukiReflection/","lang":"en-US","title":"Yuki Reflection","description":"An efficient Reflection API for Java and Android built in Kotlin","head":[["link",{"rel":"icon","href":"/YukiReflection/images/logo.png"}]],"locales":{"/en/":{"lang":"en-US","description":"An efficient Reflection API for Java and Android built in Kotlin"},"/zh-cn/":{"lang":"zh-CN","description":"\u4E00\u4E2A\u4F7F\u7528 Kotlin \u6784\u5EFA\u7684\u7528\u4E8E Java \u548C Android \u5E73\u53F0\u9AD8\u6548\u53CD\u5C04 API"}}}');var Pu=([e,t,l])=>e==="meta"&&t.name?`${e}.${t.name}`:["title","base"].includes(e)?e:e==="template"&&t.id?`${e}.${t.id}`:JSON.stringify([e,t,l]),Ou=e=>{const t=new Set,l=[];return e.forEach(n=>{const i=Pu(n);t.has(i)||(t.add(i),l.push(n))}),l},ql=e=>/^(https?:)?\/\//.test(e),Au=e=>/^mailto:/.test(e),Iu=e=>/^tel:/.test(e),Ii=e=>Object.prototype.toString.call(e)==="[object Object]",ds=e=>e.replace(/\/$/,""),hs=e=>e.replace(/^\//,""),fs=(e,t)=>{const l=Object.keys(e).sort((n,i)=>{const o=i.split("/").length-n.split("/").length;return o!==0?o:i.length-n.length});for(const n of l)if(t.startsWith(n))return n;return"/"};const ms={"v-8daa1a0e":$(()=>_(()=>import("./index.html.ed5036c6.js"),[])),"v-2d0a870d":$(()=>_(()=>import("./index.html.1339d5c2.js"),[])),"v-c0c85b84":$(()=>_(()=>import("./index.html.e2792c5f.js"),[])),"v-7a15fe3b":$(()=>_(()=>import("./about.html.94009ddf.js"),[])),"v-3f851d14":$(()=>_(()=>import("./changelog.html.a0481c52.js"),[])),"v-193cf592":$(()=>_(()=>import("./contacts.html.9abe8991.js"),[])),"v-ae7b83f2":$(()=>_(()=>import("./future.html.47405c37.js"),[])),"v-c557cfcc":$(()=>_(()=>import("./features.html.65df35ac.js"),[])),"v-64fc7bb8":$(()=>_(()=>import("./home.html.385ffce1.js"),[])),"v-9cfea7fc":$(()=>_(()=>import("./api-example.html.cc98f2cb.js"),[])),"v-72c12b7d":$(()=>_(()=>import("./api-exception.html.f26818cd.js"),[])),"v-efb45d4c":$(()=>_(()=>import("./home.html.9c97a44a.js"),[])),"v-72889797":$(()=>_(()=>import("./quick-start.html.a839f1ea.js"),[])),"v-41967128":$(()=>_(()=>import("./about.html.c8884850.js"),[])),"v-0e6c3476":$(()=>_(()=>import("./changelog.html.36e96eae.js"),[])),"v-6cf86266":$(()=>_(()=>import("./contacts.html.1da5e82b.js"),[])),"v-3106ca14":$(()=>_(()=>import("./future.html.18e105a7.js"),[])),"v-47e315ee":$(()=>_(()=>import("./features.html.9a3194da.js"),[])),"v-c8deafb2":$(()=>_(()=>import("./home.html.922e31fa.js"),[])),"v-6a609e09":$(()=>_(()=>import("./home.html.9b4cb86d.js"),[])),"v-24840ff0":$(()=>_(()=>import("./quick-start.html.83b3f2af.js"),[])),"v-c6114c9e":$(()=>_(()=>import("./api-example.html.4692aae4.js"),[])),"v-5b43296c":$(()=>_(()=>import("./api-exception.html.67f8bf5e.js"),[])),"v-23f4d2be":$(()=>_(()=>import("./YukiReflection.html.9b18a061.js"),[])),"v-c088ede0":$(()=>_(()=>import("./YukiReflection.html.6e790ebd.js"),[])),"v-47f17664":$(()=>_(()=>import("./CurrentClass.html.0cbf1174.js"),[])),"v-38df33ac":$(()=>_(()=>import("./GenericClass.html.29e779a0.js"),[])),"v-3a8666c0":$(()=>_(()=>import("./VariousClass.html.416446a8.js"),[])),"v-728f231c":$(()=>_(()=>import("./ReflectionFactory.html.3a708e8c.js"),[])),"v-406687ff":$(()=>_(()=>import("./CurrentClass.html.205e8299.js"),[])),"v-c5831246":$(()=>_(()=>import("./GenericClass.html.937c5c5e.js"),[])),"v-c234ac1e":$(()=>_(()=>import("./VariousClass.html.66b228e1.js"),[])),"v-b3841eba":$(()=>_(()=>import("./ReflectionFactory.html.faaec016.js"),[])),"v-740d06da":$(()=>_(()=>import("./BaseFinder.html.d7748acf.js"),[])),"v-6d6cd473":$(()=>_(()=>import("./DexClassFinder.html.00bc2e4b.js"),[])),"v-b3220076":$(()=>_(()=>import("./ConstructorFinder.html.a40584a1.js"),[])),"v-4b907076":$(()=>_(()=>import("./FieldFinder.html.00221b25.js"),[])),"v-012ee5a6":$(()=>_(()=>import("./MethodFinder.html.bae1e13a.js"),[])),"v-c945cb6e":$(()=>_(()=>import("./BaseFinder.html.8f83f91b.js"),[])),"v-2d13d624":$(()=>_(()=>import("./DexClassFinder.html.50819339.js"),[])),"v-722cd474":$(()=>_(()=>import("./ConstructorFinder.html.6608ff36.js"),[])),"v-293ae898":$(()=>_(()=>import("./FieldFinder.html.44edac16.js"),[])),"v-155c9f97":$(()=>_(()=>import("./MethodFinder.html.30643f39.js"),[])),"v-6c58c435":$(()=>_(()=>import("./ComponentTypeFactory.html.01fa4f98.js"),[])),"v-25cdee85":$(()=>_(()=>import("./GraphicsTypeFactory.html.d8c3b342.js"),[])),"v-12826b1f":$(()=>_(()=>import("./ViewTypeFactory.html.1609776e.js"),[])),"v-597ac69b":$(()=>_(()=>import("./DefinedTypeFactory.html.e75cea89.js"),[])),"v-5ad1133e":$(()=>_(()=>import("./VariableTypeFactory.html.2f75d9b7.js"),[])),"v-6f96d791":$(()=>_(()=>import("./CountRules.html.8fc46cf2.js"),[])),"v-56071599":$(()=>_(()=>import("./ModifierRules.html.23e3a69f.js"),[])),"v-4ea9e766":$(()=>_(()=>import("./NameRules.html.5824cbcd.js"),[])),"v-3045c7fe":$(()=>_(()=>import("./ObjectRules.html.e6691926.js"),[])),"v-cce2b7b6":$(()=>_(()=>import("./ConstructorRules.html.e247eb10.js"),[])),"v-82a85036":$(()=>_(()=>import("./FieldRules.html.29bf58de.js"),[])),"v-71ecb893":$(()=>_(()=>import("./MemberRules.html.e6dd0524.js"),[])),"v-5e7e121a":$(()=>_(()=>import("./MethodRules.html.a2613ed0.js"),[])),"v-3dbf4880":$(()=>_(()=>import("./CountRules.html.a8c6e084.js"),[])),"v-701721ec":$(()=>_(()=>import("./ModifierRules.html.b6f683e3.js"),[])),"v-264e7384":$(()=>_(()=>import("./NameRules.html.6db86216.js"),[])),"v-b0f7c49c":$(()=>_(()=>import("./ObjectRules.html.2373dc72.js"),[])),"v-ec153654":$(()=>_(()=>import("./ConstructorRules.html.73382011.js"),[])),"v-30993156":$(()=>_(()=>import("./FieldRules.html.14cfcb37.js"),[])),"v-3daa8d42":$(()=>_(()=>import("./MemberRules.html.fb90baae.js"),[])),"v-2a3be6c9":$(()=>_(()=>import("./MethodRules.html.e854c479.js"),[])),"v-30e525ac":$(()=>_(()=>import("./DefinedTypeFactory.html.db0bb621.js"),[])),"v-7f47f9f8":$(()=>_(()=>import("./ComponentTypeFactory.html.9f6eb483.js"),[])),"v-5a1019d6":$(()=>_(()=>import("./GraphicsTypeFactory.html.c2987428.js"),[])),"v-be0e3220":$(()=>_(()=>import("./ViewTypeFactory.html.4f37f6c4.js"),[])),"v-12f074b0":$(()=>_(()=>import("./VariableTypeFactory.html.a02b32e0.js"),[])),"v-4f47dfda":$(()=>_(()=>import("./MemberRulesResult.html.0030e851.js"),[])),"v-503f5f8b":$(()=>_(()=>import("./MemberRulesResult.html.230c0739.js"),[])),"v-3706649a":$(()=>_(()=>import("./404.html.10d8caae.js"),[]))};var Mt=(e={})=>e;function ps(e,t,l){var n,i,o;t===void 0&&(t=50),l===void 0&&(l={});var r=(n=l.isImmediate)!=null&&n,s=(i=l.callback)!=null&&i,a=l.maxWait,c=Date.now(),u=[];function h(){if(a!==void 0){var p=Date.now()-c;if(p+t>=a)return a-p}return t}var f=function(){var p=[].slice.call(arguments),k=this;return new Promise(function(R,x){var g=r&&o===void 0;if(o!==void 0&&clearTimeout(o),o=setTimeout(function(){if(o=void 0,c=Date.now(),!r){var w=e.apply(k,p);s&&s(w),u.forEach(function(D){return(0,D.resolve)(w)}),u=[]}},h()),g){var b=e.apply(k,p);return s&&s(b),R(b)}u.push({resolve:R,reject:x})})};return f.cancel=function(p){o!==void 0&&clearTimeout(o),u.forEach(function(k){return(0,k.reject)(p)}),u=[]},f}/*! - * vue-router v4.1.5 - * (c) 2022 Eduardo San Martin Morote - * @license MIT - */const ol=typeof window<"u";function Fu(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const be=Object.assign;function Hn(e,t){const l={};for(const n in t){const i=t[n];l[n]=at(i)?i.map(e):e(i)}return l}const Pl=()=>{},at=Array.isArray,Su=/\/$/,zu=e=>e.replace(Su,"");function jn(e,t,l="/"){let n,i={},o="",r="";const s=t.indexOf("#");let a=t.indexOf("?");return s=0&&(a=-1),a>-1&&(n=t.slice(0,a),o=t.slice(a+1,s>-1?s:t.length),i=e(o)),s>-1&&(n=n||t.slice(0,s),r=t.slice(s,t.length)),n=$u(n!=null?n:t,l),{fullPath:n+(o&&"?")+o+r,path:n,query:i,hash:r}}function Du(e,t){const l=t.query?e(t.query):"";return t.path+(l&&"?")+l+(t.hash||"")}function Lo(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function Mu(e,t,l){const n=t.matched.length-1,i=l.matched.length-1;return n>-1&&n===i&&hl(t.matched[n],l.matched[i])&&gs(t.params,l.params)&&e(t.query)===e(l.query)&&t.hash===l.hash}function hl(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function gs(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const l in e)if(!Nu(e[l],t[l]))return!1;return!0}function Nu(e,t){return at(e)?Po(e,t):at(t)?Po(t,e):e===t}function Po(e,t){return at(t)?e.length===t.length&&e.every((l,n)=>l===t[n]):e.length===1&&e[0]===t}function $u(e,t){if(e.startsWith("/"))return e;if(!e)return t;const l=t.split("/"),n=e.split("/");let i=l.length-1,o,r;for(o=0;o1&&i--;else break;return l.slice(0,i).join("/")+"/"+n.slice(o-(o===n.length?1:0)).join("/")}var Ml;(function(e){e.pop="pop",e.push="push"})(Ml||(Ml={}));var Ol;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ol||(Ol={}));function Vu(e){if(!e)if(ol){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),zu(e)}const Hu=/^[^#]+#/;function ju(e,t){return e.replace(Hu,"#")+t}function Bu(e,t){const l=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-l.left-(t.left||0),top:n.top-l.top-(t.top||0)}}const An=()=>({left:window.pageXOffset,top:window.pageYOffset});function Uu(e){let t;if("el"in e){const l=e.el,n=typeof l=="string"&&l.startsWith("#"),i=typeof l=="string"?n?document.getElementById(l.slice(1)):document.querySelector(l):l;if(!i)return;t=Bu(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function Oo(e,t){return(history.state?history.state.position-t:-1)+e}const ci=new Map;function qu(e,t){ci.set(e,t)}function Ku(e){const t=ci.get(e);return ci.delete(e),t}let Wu=()=>location.protocol+"//"+location.host;function vs(e,t){const{pathname:l,search:n,hash:i}=t,o=e.indexOf("#");if(o>-1){let s=i.includes(e.slice(o))?e.slice(o).length:1,a=i.slice(s);return a[0]!=="/"&&(a="/"+a),Lo(a,"")}return Lo(l,e)+n+i}function Gu(e,t,l,n){let i=[],o=[],r=null;const s=({state:f})=>{const p=vs(e,location),k=l.value,R=t.value;let x=0;if(f){if(l.value=p,t.value=f,r&&r===k){r=null;return}x=R?f.position-R.position:0}else n(p);i.forEach(g=>{g(l.value,k,{delta:x,type:Ml.pop,direction:x?x>0?Ol.forward:Ol.back:Ol.unknown})})};function a(){r=l.value}function c(f){i.push(f);const p=()=>{const k=i.indexOf(f);k>-1&&i.splice(k,1)};return o.push(p),p}function u(){const{history:f}=window;!f.state||f.replaceState(be({},f.state,{scroll:An()}),"")}function h(){for(const f of o)f();o=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",u)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",u),{pauseListeners:a,listen:c,destroy:h}}function Ao(e,t,l,n=!1,i=!1){return{back:e,current:t,forward:l,replaced:n,position:window.history.length,scroll:i?An():null}}function Yu(e){const{history:t,location:l}=window,n={value:vs(e,l)},i={value:t.state};i.value||o(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function o(a,c,u){const h=e.indexOf("#"),f=h>-1?(l.host&&document.querySelector("base")?e:e.slice(h))+a:Wu()+e+a;try{t[u?"replaceState":"pushState"](c,"",f),i.value=c}catch(p){console.error(p),l[u?"replace":"assign"](f)}}function r(a,c){const u=be({},t.state,Ao(i.value.back,a,i.value.forward,!0),c,{position:i.value.position});o(a,u,!0),n.value=a}function s(a,c){const u=be({},i.value,t.state,{forward:a,scroll:An()});o(u.current,u,!0);const h=be({},Ao(n.value,a,null),{position:u.position+1},c);o(a,h,!1),n.value=a}return{location:n,state:i,push:s,replace:r}}function Qu(e){e=Vu(e);const t=Yu(e),l=Gu(e,t.state,t.location,t.replace);function n(o,r=!0){r||l.pauseListeners(),history.go(o)}const i=be({location:"",base:e,go:n,createHref:ju.bind(null,e)},t,l);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function Ju(e){return typeof e=="string"||e&&typeof e=="object"}function bs(e){return typeof e=="string"||typeof e=="symbol"}const mt={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},_s=Symbol("");var Io;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(Io||(Io={}));function fl(e,t){return be(new Error,{type:e,[_s]:!0},t)}function ft(e,t){return e instanceof Error&&_s in e&&(t==null||!!(e.type&t))}const Fo="[^/]+?",Zu={sensitive:!1,strict:!1,start:!0,end:!0},Xu=/[.+*?^${}()[\]/\\]/g;function ed(e,t){const l=be({},Zu,t),n=[];let i=l.start?"^":"";const o=[];for(const c of e){const u=c.length?[]:[90];l.strict&&!c.length&&(i+="/");for(let h=0;ht.length?t.length===1&&t[0]===40+40?1:-1:0}function ld(e,t){let l=0;const n=e.score,i=t.score;for(;l0&&t[t.length-1]<0}const nd={type:0,value:""},id=/[a-zA-Z0-9_]/;function od(e){if(!e)return[[]];if(e==="/")return[[nd]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(p){throw new Error(`ERR (${l})/"${c}": ${p}`)}let l=0,n=l;const i=[];let o;function r(){o&&i.push(o),o=[]}let s=0,a,c="",u="";function h(){!c||(l===0?o.push({type:0,value:c}):l===1||l===2||l===3?(o.length>1&&(a==="*"||a==="+")&&t(`A repeatable param (${c}) must be alone in its segment. eg: '/:ids+.`),o.push({type:1,value:c,regexp:u,repeatable:a==="*"||a==="+",optional:a==="*"||a==="?"})):t("Invalid state to consume buffer"),c="")}function f(){c+=a}for(;s{r(b)}:Pl}function r(u){if(bs(u)){const h=n.get(u);h&&(n.delete(u),l.splice(l.indexOf(h),1),h.children.forEach(r),h.alias.forEach(r))}else{const h=l.indexOf(u);h>-1&&(l.splice(h,1),u.record.name&&n.delete(u.record.name),u.children.forEach(r),u.alias.forEach(r))}}function s(){return l}function a(u){let h=0;for(;h=0&&(u.record.path!==l[h].record.path||!ys(u,l[h]));)h++;l.splice(h,0,u),u.record.name&&!Do(u)&&n.set(u.record.name,u)}function c(u,h){let f,p={},k,R;if("name"in u&&u.name){if(f=n.get(u.name),!f)throw fl(1,{location:u});R=f.record.name,p=be(zo(h.params,f.keys.filter(b=>!b.optional).map(b=>b.name)),u.params&&zo(u.params,f.keys.map(b=>b.name))),k=f.stringify(p)}else if("path"in u)k=u.path,f=l.find(b=>b.re.test(k)),f&&(p=f.parse(k),R=f.record.name);else{if(f=h.name?n.get(h.name):l.find(b=>b.re.test(h.path)),!f)throw fl(1,{location:u,currentLocation:h});R=f.record.name,p=be({},h.params,u.params),k=f.stringify(p)}const x=[];let g=f;for(;g;)x.unshift(g.record),g=g.parent;return{name:R,path:k,params:p,matched:x,meta:ud(x)}}return e.forEach(u=>o(u)),{addRoute:o,resolve:c,removeRoute:r,getRoutes:s,getRecordMatcher:i}}function zo(e,t){const l={};for(const n of t)n in e&&(l[n]=e[n]);return l}function ad(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:cd(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function cd(e){const t={},l=e.props||!1;if("component"in e)t.default=l;else for(const n in e.components)t[n]=typeof l=="boolean"?l:l[n];return t}function Do(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function ud(e){return e.reduce((t,l)=>be(t,l.meta),{})}function Mo(e,t){const l={};for(const n in e)l[n]=n in t?t[n]:e[n];return l}function ys(e,t){return t.children.some(l=>l===e||ys(e,l))}const ks=/#/g,dd=/&/g,hd=/\//g,fd=/=/g,md=/\?/g,xs=/\+/g,pd=/%5B/g,gd=/%5D/g,Es=/%5E/g,vd=/%60/g,Cs=/%7B/g,bd=/%7C/g,Rs=/%7D/g,_d=/%20/g;function Fi(e){return encodeURI(""+e).replace(bd,"|").replace(pd,"[").replace(gd,"]")}function yd(e){return Fi(e).replace(Cs,"{").replace(Rs,"}").replace(Es,"^")}function ui(e){return Fi(e).replace(xs,"%2B").replace(_d,"+").replace(ks,"%23").replace(dd,"%26").replace(vd,"`").replace(Cs,"{").replace(Rs,"}").replace(Es,"^")}function kd(e){return ui(e).replace(fd,"%3D")}function xd(e){return Fi(e).replace(ks,"%23").replace(md,"%3F")}function Ed(e){return e==null?"":xd(e).replace(hd,"%2F")}function gn(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function Cd(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;io&&ui(o)):[n&&ui(n)]).forEach(o=>{o!==void 0&&(t+=(t.length?"&":"")+l,o!=null&&(t+="="+o))})}return t}function Rd(e){const t={};for(const l in e){const n=e[l];n!==void 0&&(t[l]=at(n)?n.map(i=>i==null?null:""+i):n==null?n:""+n)}return t}const wd=Symbol(""),$o=Symbol(""),In=Symbol(""),Si=Symbol(""),di=Symbol("");function yl(){let e=[];function t(n){return e.push(n),()=>{const i=e.indexOf(n);i>-1&&e.splice(i,1)}}function l(){e=[]}return{add:t,list:()=>e,reset:l}}function Lt(e,t,l,n,i){const o=n&&(n.enterCallbacks[i]=n.enterCallbacks[i]||[]);return()=>new Promise((r,s)=>{const a=h=>{h===!1?s(fl(4,{from:l,to:t})):h instanceof Error?s(h):Ju(h)?s(fl(2,{from:t,to:h})):(o&&n.enterCallbacks[i]===o&&typeof h=="function"&&o.push(h),r())},c=e.call(n&&n.instances[i],t,l,a);let u=Promise.resolve(c);e.length<3&&(u=u.then(a)),u.catch(h=>s(h))})}function Bn(e,t,l,n){const i=[];for(const o of e)for(const r in o.components){let s=o.components[r];if(!(t!=="beforeRouteEnter"&&!o.instances[r]))if(Td(s)){const c=(s.__vccOpts||s)[t];c&&i.push(Lt(c,l,n,o,r))}else{let a=s();i.push(()=>a.then(c=>{if(!c)return Promise.reject(new Error(`Couldn't resolve component "${r}" at "${o.path}"`));const u=Fu(c)?c.default:c;o.components[r]=u;const f=(u.__vccOpts||u)[t];return f&&Lt(f,l,n,o,r)()}))}}return i}function Td(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Vo(e){const t=De(In),l=De(Si),n=B(()=>t.resolve(A(e.to))),i=B(()=>{const{matched:a}=n.value,{length:c}=a,u=a[c-1],h=l.matched;if(!u||!h.length)return-1;const f=h.findIndex(hl.bind(null,u));if(f>-1)return f;const p=Ho(a[c-2]);return c>1&&Ho(u)===p&&h[h.length-1].path!==p?h.findIndex(hl.bind(null,a[c-2])):f}),o=B(()=>i.value>-1&&Ad(l.params,n.value.params)),r=B(()=>i.value>-1&&i.value===l.matched.length-1&&gs(l.params,n.value.params));function s(a={}){return Od(a)?t[A(e.replace)?"replace":"push"](A(e.to)).catch(Pl):Promise.resolve()}return{route:n,href:B(()=>n.value.href),isActive:o,isExactActive:r,navigate:s}}const Ld=he({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Vo,setup(e,{slots:t}){const l=gl(Vo(e)),{options:n}=De(In),i=B(()=>({[jo(e.activeClass,n.linkActiveClass,"router-link-active")]:l.isActive,[jo(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:l.isExactActive}));return()=>{const o=t.default&&t.default(l);return e.custom?o:ue("a",{"aria-current":l.isExactActive?e.ariaCurrentValue:null,href:l.href,onClick:l.navigate,class:i.value},o)}}}),Pd=Ld;function Od(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function Ad(e,t){for(const l in t){const n=t[l],i=e[l];if(typeof n=="string"){if(n!==i)return!1}else if(!at(i)||i.length!==n.length||n.some((o,r)=>o!==i[r]))return!1}return!0}function Ho(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const jo=(e,t,l)=>e!=null?e:t!=null?t:l,Id=he({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:l}){const n=De(di),i=B(()=>e.route||n.value),o=De($o,0),r=B(()=>{let c=A(o);const{matched:u}=i.value;let h;for(;(h=u[c])&&!h.components;)c++;return c}),s=B(()=>i.value.matched[r.value]);Qt($o,B(()=>r.value+1)),Qt(wd,s),Qt(di,i);const a=ke();return dt(()=>[a.value,s.value,e.name],([c,u,h],[f,p,k])=>{u&&(u.instances[h]=c,p&&p!==u&&c&&c===f&&(u.leaveGuards.size||(u.leaveGuards=p.leaveGuards),u.updateGuards.size||(u.updateGuards=p.updateGuards))),c&&u&&(!p||!hl(u,p)||!f)&&(u.enterCallbacks[h]||[]).forEach(R=>R(c))},{flush:"post"}),()=>{const c=i.value,u=e.name,h=s.value,f=h&&h.components[u];if(!f)return Bo(l.default,{Component:f,route:c});const p=h.props[u],k=p?p===!0?c.params:typeof p=="function"?p(c):p:null,x=ue(f,be({},k,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(h.instances[u]=null)},ref:a}));return Bo(l.default,{Component:x,route:c})||x}}});function Bo(e,t){if(!e)return null;const l=e(t);return l.length===1?l[0]:l}const ws=Id;function Fd(e){const t=sd(e.routes,e),l=e.parseQuery||Cd,n=e.stringifyQuery||No,i=e.history,o=yl(),r=yl(),s=yl(),a=Ar(mt);let c=mt;ol&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const u=Hn.bind(null,C=>""+C),h=Hn.bind(null,Ed),f=Hn.bind(null,gn);function p(C,K){let z,W;return bs(C)?(z=t.getRecordMatcher(C),W=K):W=C,t.addRoute(W,z)}function k(C){const K=t.getRecordMatcher(C);K&&t.removeRoute(K)}function R(){return t.getRoutes().map(C=>C.record)}function x(C){return!!t.getRecordMatcher(C)}function g(C,K){if(K=be({},K||a.value),typeof C=="string"){const ne=jn(l,C,K.path),d=t.resolve({path:ne.path},K),m=i.createHref(ne.fullPath);return be(ne,d,{params:f(d.params),hash:gn(ne.hash),redirectedFrom:void 0,href:m})}let z;if("path"in C)z=be({},C,{path:jn(l,C.path,K.path).path});else{const ne=be({},C.params);for(const d in ne)ne[d]==null&&delete ne[d];z=be({},C,{params:h(C.params)}),K.params=h(K.params)}const W=t.resolve(z,K),ge=C.hash||"";W.params=u(f(W.params));const ye=Du(n,be({},C,{hash:yd(ge),path:W.path})),ce=i.createHref(ye);return be({fullPath:ye,hash:ge,query:n===No?Rd(C.query):C.query||{}},W,{redirectedFrom:void 0,href:ce})}function b(C){return typeof C=="string"?jn(l,C,a.value.path):be({},C)}function w(C,K){if(c!==C)return fl(8,{from:K,to:C})}function D(C){return O(C)}function q(C){return D(be(b(C),{replace:!0}))}function ee(C){const K=C.matched[C.matched.length-1];if(K&&K.redirect){const{redirect:z}=K;let W=typeof z=="function"?z(C):z;return typeof W=="string"&&(W=W.includes("?")||W.includes("#")?W=b(W):{path:W},W.params={}),be({query:C.query,hash:C.hash,params:"path"in W?{}:C.params},W)}}function O(C,K){const z=c=g(C),W=a.value,ge=C.state,ye=C.force,ce=C.replace===!0,ne=ee(z);if(ne)return O(be(b(ne),{state:typeof ne=="object"?be({},ge,ne.state):ge,force:ye,replace:ce}),K||z);const d=z;d.redirectedFrom=K;let m;return!ye&&Mu(n,W,z)&&(m=fl(16,{to:d,from:W}),Ve(W,W,!0,!1)),(m?Promise.resolve(m):G(d,W)).catch(y=>ft(y)?ft(y,2)?y:Oe(y):le(y,d,W)).then(y=>{if(y){if(ft(y,2))return O(be({replace:ce},b(y.to),{state:typeof y.to=="object"?be({},ge,y.to.state):ge,force:ye}),K||d)}else y=Q(d,W,!0,ce,ge);return U(d,W,y),y})}function v(C,K){const z=w(C,K);return z?Promise.reject(z):Promise.resolve()}function G(C,K){let z;const[W,ge,ye]=Sd(C,K);z=Bn(W.reverse(),"beforeRouteLeave",C,K);for(const ne of W)ne.leaveGuards.forEach(d=>{z.push(Lt(d,C,K))});const ce=v.bind(null,C,K);return z.push(ce),tl(z).then(()=>{z=[];for(const ne of o.list())z.push(Lt(ne,C,K));return z.push(ce),tl(z)}).then(()=>{z=Bn(ge,"beforeRouteUpdate",C,K);for(const ne of ge)ne.updateGuards.forEach(d=>{z.push(Lt(d,C,K))});return z.push(ce),tl(z)}).then(()=>{z=[];for(const ne of C.matched)if(ne.beforeEnter&&!K.matched.includes(ne))if(at(ne.beforeEnter))for(const d of ne.beforeEnter)z.push(Lt(d,C,K));else z.push(Lt(ne.beforeEnter,C,K));return z.push(ce),tl(z)}).then(()=>(C.matched.forEach(ne=>ne.enterCallbacks={}),z=Bn(ye,"beforeRouteEnter",C,K),z.push(ce),tl(z))).then(()=>{z=[];for(const ne of r.list())z.push(Lt(ne,C,K));return z.push(ce),tl(z)}).catch(ne=>ft(ne,8)?ne:Promise.reject(ne))}function U(C,K,z){for(const W of s.list())W(C,K,z)}function Q(C,K,z,W,ge){const ye=w(C,K);if(ye)return ye;const ce=K===mt,ne=ol?history.state:{};z&&(W||ce?i.replace(C.fullPath,be({scroll:ce&&ne&&ne.scroll},ge)):i.push(C.fullPath,ge)),a.value=C,Ve(C,K,z,ce),Oe()}let E;function M(){E||(E=i.listen((C,K,z)=>{if(!$t.listening)return;const W=g(C),ge=ee(W);if(ge){O(be(ge,{replace:!0}),W).catch(Pl);return}c=W;const ye=a.value;ol&&qu(Oo(ye.fullPath,z.delta),An()),G(W,ye).catch(ce=>ft(ce,12)?ce:ft(ce,2)?(O(ce.to,W).then(ne=>{ft(ne,20)&&!z.delta&&z.type===Ml.pop&&i.go(-1,!1)}).catch(Pl),Promise.reject()):(z.delta&&i.go(-z.delta,!1),le(ce,W,ye))).then(ce=>{ce=ce||Q(W,ye,!1),ce&&(z.delta&&!ft(ce,8)?i.go(-z.delta,!1):z.type===Ml.pop&&ft(ce,20)&&i.go(-1,!1)),U(W,ye,ce)}).catch(Pl)}))}let I=yl(),se=yl(),H;function le(C,K,z){Oe(C);const W=se.list();return W.length?W.forEach(ge=>ge(C,K,z)):console.error(C),Promise.reject(C)}function ae(){return H&&a.value!==mt?Promise.resolve():new Promise((C,K)=>{I.add([C,K])})}function Oe(C){return H||(H=!C,M(),I.list().forEach(([K,z])=>C?z(C):K()),I.reset()),C}function Ve(C,K,z,W){const{scrollBehavior:ge}=e;if(!ol||!ge)return Promise.resolve();const ye=!z&&Ku(Oo(C.fullPath,0))||(W||!z)&&history.state&&history.state.scroll||null;return Hl().then(()=>ge(C,K,ye)).then(ce=>ce&&Uu(ce)).catch(ce=>le(ce,C,K))}const qe=C=>i.go(C);let Xe;const Be=new Set,$t={currentRoute:a,listening:!0,addRoute:p,removeRoute:k,hasRoute:x,getRoutes:R,resolve:g,options:e,push:D,replace:q,go:qe,back:()=>qe(-1),forward:()=>qe(1),beforeEach:o.add,beforeResolve:r.add,afterEach:s.add,onError:se.add,isReady:ae,install(C){const K=this;C.component("RouterLink",Pd),C.component("RouterView",ws),C.config.globalProperties.$router=K,Object.defineProperty(C.config.globalProperties,"$route",{enumerable:!0,get:()=>A(a)}),ol&&!Xe&&a.value===mt&&(Xe=!0,D(i.location).catch(ge=>{}));const z={};for(const ge in mt)z[ge]=B(()=>a.value[ge]);C.provide(In,K),C.provide(Si,gl(z)),C.provide(di,a);const W=C.unmount;Be.add(C),C.unmount=function(){Be.delete(C),Be.size<1&&(c=mt,E&&E(),E=null,a.value=mt,Xe=!1,H=!1),W()}}};return $t}function tl(e){return e.reduce((t,l)=>t.then(()=>l()),Promise.resolve())}function Sd(e,t){const l=[],n=[],i=[],o=Math.max(t.matched.length,e.matched.length);for(let r=0;rhl(c,s))?n.push(s):l.push(s));const a=e.matched[r];a&&(t.matched.find(c=>hl(c,a))||i.push(a))}return[l,n,i]}function Xt(){return De(In)}function Nt(){return De(Si)}const zd=({headerLinkSelector:e,headerAnchorSelector:t,delay:l,offset:n=5})=>{const i=Xt(),r=ps(()=>{var R,x,g,b;const s=Math.max(window.scrollY,document.documentElement.scrollTop,document.body.scrollTop);if(Math.abs(s-0)f.some(D=>D.hash===w.hash));for(let w=0;w=((x=(R=D.parentElement)==null?void 0:R.offsetTop)!=null?x:0)-n,O=!q||s<((b=(g=q.parentElement)==null?void 0:g.offsetTop)!=null?b:0)-n;if(!(ee&&O))continue;const G=decodeURIComponent(i.currentRoute.value.hash),U=decodeURIComponent(D.hash);if(G===U)return;if(h){for(let Q=w+1;Q{window.addEventListener("scroll",r)}),Bl(()=>{window.removeEventListener("scroll",r)})},Uo=async(e,t)=>{const{scrollBehavior:l}=e.options;e.options.scrollBehavior=void 0,await e.replace({query:e.currentRoute.value.query,hash:t,force:!0}).finally(()=>e.options.scrollBehavior=l)},Dd="a.sidebar-item",Md=".header-anchor",Nd=300,$d=5,Vd=Mt({setup(){zd({headerLinkSelector:Dd,headerAnchorSelector:Md,delay:Nd,offset:$d})}}),qo=()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,Hd=()=>window.scrollTo({top:0,behavior:"smooth"});const jd=he({name:"BackToTop",setup(){const e=ke(0),t=B(()=>e.value>300),l=ps(()=>{e.value=qo()},100);Ze(()=>{e.value=qo(),window.addEventListener("scroll",()=>l())});const n=ue("div",{class:"back-to-top",onClick:Hd});return()=>ue(Ul,{name:"back-to-top"},()=>t.value?n:null)}}),Bd=Mt({rootComponents:[jd]});const Ud=ue("svg",{class:"external-link-icon",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"},[ue("path",{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}),ue("polygon",{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"})]),qd=he({name:"ExternalLinkIcon",props:{locales:{type:Object,required:!1,default:()=>({})}},setup(e){const t=Kl(),l=B(()=>{var n;return(n=e.locales[t.value])!=null?n:{openInNewWindow:"open in new window"}});return()=>ue("span",[Ud,ue("span",{class:"external-link-icon-sr-only"},l.value.openInNewWindow)])}}),Kd={"/en/":{openInNewWindow:"open in new window"},"/zh-cn/":{openInNewWindow:"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00"},"/":{openInNewWindow:"open in new window"}},Wd=Mt({enhance({app:e}){e.component("ExternalLinkIcon",ue(qd,{locales:Kd}))}});/*! medium-zoom 1.0.6 | MIT License | https://github.com/francoischalifour/medium-zoom */var Ut=Object.assign||function(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{},n=window.Promise||function(E){function M(){}E(M,M)},i=function(E){var M=E.target;if(M===G){k();return}w.indexOf(M)!==-1&&R({target:M})},o=function(){if(!(q||!v.original)){var E=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(ee-E)>O.scrollOffset&&setTimeout(k,150)}},r=function(E){var M=E.key||E.keyCode;(M==="Escape"||M==="Esc"||M===27)&&k()},s=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=E;if(E.background&&(G.style.background=E.background),E.container&&E.container instanceof Object&&(M.container=Ut({},O.container,E.container)),E.template){var I=nn(E.template)?E.template:document.querySelector(E.template);M.template=I}return O=Ut({},O,M),w.forEach(function(se){se.dispatchEvent(ll("medium-zoom:update",{detail:{zoom:U}}))}),U},a=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return e(Ut({},O,E))},c=function(){for(var E=arguments.length,M=Array(E),I=0;I0?M.reduce(function(H,le){return[].concat(H,Wo(le))},[]):w;return se.forEach(function(H){H.classList.remove("medium-zoom-image"),H.dispatchEvent(ll("medium-zoom:detach",{detail:{zoom:U}}))}),w=w.filter(function(H){return se.indexOf(H)===-1}),U},h=function(E,M){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return w.forEach(function(se){se.addEventListener("medium-zoom:"+E,M,I)}),D.push({type:"medium-zoom:"+E,listener:M,options:I}),U},f=function(E,M){var I=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return w.forEach(function(se){se.removeEventListener("medium-zoom:"+E,M,I)}),D=D.filter(function(se){return!(se.type==="medium-zoom:"+E&&se.listener.toString()===M.toString())}),U},p=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=E.target,I=function(){var H={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},le=void 0,ae=void 0;if(O.container)if(O.container instanceof Object)H=Ut({},H,O.container),le=H.width-H.left-H.right-O.margin*2,ae=H.height-H.top-H.bottom-O.margin*2;else{var Oe=nn(O.container)?O.container:document.querySelector(O.container),Ve=Oe.getBoundingClientRect(),qe=Ve.width,Xe=Ve.height,Be=Ve.left,$t=Ve.top;H=Ut({},H,{width:qe,height:Xe,left:Be,top:$t})}le=le||H.width-O.margin*2,ae=ae||H.height-O.margin*2;var C=v.zoomedHd||v.original,K=Ko(C)?le:C.naturalWidth||le,z=Ko(C)?ae:C.naturalHeight||ae,W=C.getBoundingClientRect(),ge=W.top,ye=W.left,ce=W.width,ne=W.height,d=Math.min(K,le)/ce,m=Math.min(z,ae)/ne,y=Math.min(d,m),L=(-ye+(le-ce)/2+O.margin+H.left)/y,T=(-ge+(ae-ne)/2+O.margin+H.top)/y,F="scale("+y+") translate3d("+L+"px, "+T+"px, 0)";v.zoomed.style.transform=F,v.zoomedHd&&(v.zoomedHd.style.transform=F)};return new n(function(se){if(M&&w.indexOf(M)===-1){se(U);return}var H=function qe(){q=!1,v.zoomed.removeEventListener("transitionend",qe),v.original.dispatchEvent(ll("medium-zoom:opened",{detail:{zoom:U}})),se(U)};if(v.zoomed){se(U);return}if(M)v.original=M;else if(w.length>0){var le=w;v.original=le[0]}else{se(U);return}if(v.original.dispatchEvent(ll("medium-zoom:open",{detail:{zoom:U}})),ee=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,q=!0,v.zoomed=Qd(v.original),document.body.appendChild(G),O.template){var ae=nn(O.template)?O.template:document.querySelector(O.template);v.template=document.createElement("div"),v.template.appendChild(ae.content.cloneNode(!0)),document.body.appendChild(v.template)}if(document.body.appendChild(v.zoomed),window.requestAnimationFrame(function(){document.body.classList.add("medium-zoom--opened")}),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",k),v.zoomed.addEventListener("transitionend",H),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(Oe),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,I()};var Oe=setInterval(function(){v.zoomedHd.complete&&(clearInterval(Oe),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",k),document.body.appendChild(v.zoomedHd),I())},10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var Ve=v.zoomedHd.addEventListener("load",function(){v.zoomedHd.removeEventListener("load",Ve),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",k),document.body.appendChild(v.zoomedHd),I()})}else I()})},k=function(){return new n(function(E){if(q||!v.original){E(U);return}var M=function I(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(G),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),q=!1,v.zoomed.removeEventListener("transitionend",I),v.original.dispatchEvent(ll("medium-zoom:closed",{detail:{zoom:U}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,E(U)};q=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(ll("medium-zoom:close",{detail:{zoom:U}})),v.zoomed.addEventListener("transitionend",M)})},R=function(){var E=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},M=E.target;return v.original?k():p({target:M})},x=function(){return O},g=function(){return w},b=function(){return v.original},w=[],D=[],q=!1,ee=0,O=l,v={original:null,zoomed:null,zoomedHd:null,template:null};Object.prototype.toString.call(t)==="[object Object]"?O=t:(t||typeof t=="string")&&c(t),O=Ut({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},O);var G=Yd(O.background);document.addEventListener("click",i),document.addEventListener("keyup",r),document.addEventListener("scroll",o),window.addEventListener("resize",k);var U={open:p,close:k,toggle:R,update:s,clone:a,attach:c,detach:u,on:h,off:f,getOptions:x,getImages:g,getZoomedImage:b};return U};function Zd(e,t){t===void 0&&(t={});var l=t.insertAt;if(!(!e||typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css",l==="top"&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var Xd=".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}";Zd(Xd);const eh=Jd,th=Symbol("mediumZoom");const lh=".theme-default-content > img, .theme-default-content :not(a) > img",nh={},ih=300,oh=Mt({enhance({app:e,router:t}){const l=eh(nh);l.refresh=(n=lh)=>{l.detach(),l.attach(n)},e.provide(th,l),t.afterEach(()=>{setTimeout(()=>l.refresh(),ih)})}});/** - * NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress - * @license MIT - */const me={settings:{minimum:.08,easing:"ease",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,barSelector:'[role="bar"]',parent:"body",template:'
'},status:null,set:e=>{const t=me.isStarted();e=Un(e,me.settings.minimum,1),me.status=e===1?null:e;const l=me.render(!t),n=l.querySelector(me.settings.barSelector),i=me.settings.speed,o=me.settings.easing;return l.offsetWidth,rh(r=>{tn(n,{transform:"translate3d("+Go(e)+"%,0,0)",transition:"all "+i+"ms "+o}),e===1?(tn(l,{transition:"none",opacity:"1"}),l.offsetWidth,setTimeout(function(){tn(l,{transition:"all "+i+"ms linear",opacity:"0"}),setTimeout(function(){me.remove(),r()},i)},i)):setTimeout(()=>r(),i)}),me},isStarted:()=>typeof me.status=="number",start:()=>{me.status||me.set(0);const e=()=>{setTimeout(()=>{!me.status||(me.trickle(),e())},me.settings.trickleSpeed)};return me.settings.trickle&&e(),me},done:e=>!e&&!me.status?me:me.inc(.3+.5*Math.random()).set(1),inc:e=>{let t=me.status;return t?(typeof e!="number"&&(e=(1-t)*Un(Math.random()*t,.1,.95)),t=Un(t+e,0,.994),me.set(t)):me.start()},trickle:()=>me.inc(Math.random()*me.settings.trickleRate),render:e=>{if(me.isRendered())return document.getElementById("nprogress");Yo(document.documentElement,"nprogress-busy");const t=document.createElement("div");t.id="nprogress",t.innerHTML=me.settings.template;const l=t.querySelector(me.settings.barSelector),n=e?"-100":Go(me.status||0),i=document.querySelector(me.settings.parent);return tn(l,{transition:"all 0 linear",transform:"translate3d("+n+"%,0,0)"}),i!==document.body&&Yo(i,"nprogress-custom-parent"),i==null||i.appendChild(t),t},remove:()=>{Qo(document.documentElement,"nprogress-busy"),Qo(document.querySelector(me.settings.parent),"nprogress-custom-parent");const e=document.getElementById("nprogress");e&&sh(e)},isRendered:()=>!!document.getElementById("nprogress")},Un=(e,t,l)=>el?l:e,Go=e=>(-1+e)*100,rh=function(){const e=[];function t(){const l=e.shift();l&&l(t)}return function(l){e.push(l),e.length===1&&t()}}(),tn=function(){const e=["Webkit","O","Moz","ms"],t={};function l(r){return r.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,function(s,a){return a.toUpperCase()})}function n(r){const s=document.body.style;if(r in s)return r;let a=e.length;const c=r.charAt(0).toUpperCase()+r.slice(1);let u;for(;a--;)if(u=e[a]+c,u in s)return u;return r}function i(r){return r=l(r),t[r]||(t[r]=n(r))}function o(r,s,a){s=i(s),r.style[s]=a}return function(r,s){for(const a in s){const c=s[a];c!==void 0&&Object.prototype.hasOwnProperty.call(s,a)&&o(r,a,c)}}}(),Ts=(e,t)=>(typeof e=="string"?e:zi(e)).indexOf(" "+t+" ")>=0,Yo=(e,t)=>{const l=zi(e),n=l+t;Ts(l,t)||(e.className=n.substring(1))},Qo=(e,t)=>{const l=zi(e);if(!Ts(e,t))return;const n=l.replace(" "+t+" "," ");e.className=n.substring(1,n.length-1)},zi=e=>(" "+(e.className||"")+" ").replace(/\s+/gi," "),sh=e=>{e&&e.parentNode&&e.parentNode.removeChild(e)};const ah=()=>{Ze(()=>{const e=Xt(),t=new Set;t.add(e.currentRoute.value.path),e.beforeEach(l=>{t.has(l.path)||me.start()}),e.afterEach(l=>{t.add(l.path),me.done()})})},ch=Mt({setup(){ah()}}),uh=JSON.parse(`{"logo":"/images/logo.png","repo":"https://github.com/fankes/YukiReflection","docsRepo":"https://github.com/fankes/YukiReflection","docsBranch":"master","docsDir":"docs-source/src","editLinkPattern":":repo/edit/:branch/:path","sidebar":{"/en/":[{"text":"Get Started","collapsible":true,"children":["/en/guide/home","/en/guide/quick-start"]},{"text":"Configs","collapsible":true,"children":["/en/config/api-example","/en/config/api-exception"]},{"text":"API Document","collapsible":true,"children":["/en/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/en/api/public/com/highcapable/yukireflection/YukiReflection","/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory","/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder","/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder","/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder","/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukireflection/bean/VariousClass","/en/api/public/com/highcapable/yukireflection/bean/CurrentClass","/en/api/public/com/highcapable/yukireflection/bean/GenericClass"]},"/en/api/features"]},{"text":"About","collapsible":true,"children":["/en/about/changelog","/en/about/future","/en/about/contacts","/en/about/about"]}],"/zh-cn/":[{"text":"\u5165\u95E8","collapsible":true,"children":["/zh-cn/guide/home","/zh-cn/guide/quick-start"]},{"text":"\u914D\u7F6E","collapsible":true,"children":["/zh-cn/config/api-example","/zh-cn/config/api-exception"]},{"text":"API \u6587\u6863","collapsible":true,"children":["/zh-cn/api/home",{"text":"Public API\xA0","collapsible":true,"children":["/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass"]},"/zh-cn/api/features"]},{"text":"\u5173\u4E8E","collapsible":true,"children":["/zh-cn/about/changelog","/zh-cn/about/future","/zh-cn/about/contacts","/zh-cn/about/about"]}]},"sidebarDepth":2,"locales":{"/en/":{"navbar":[{"text":"Navigation","children":[{"text":"Get Started","children":[{"text":"Introduce","link":"/en/guide/home"},{"text":"Quick Start","link":"/en/guide/quick-start"}]},{"text":"Configs","children":[{"text":"API Basic Configs","link":"/en/config/api-example"},{"text":"API Exception Handling","link":"/en/config/api-exception"}]},{"text":"API Document","children":[{"text":"Document Introduction","link":"/en/api/home"},{"text":"Public API","link":"/en/api/public/com/highcapable/yukireflection/YukiReflection","activeMatch":"/en/api/public/"},{"text":"Features","link":"/en/api/features"}]},{"text":"About","children":[{"text":"Changelog","link":"/en/about/changelog"},{"text":"Looking for Future","link":"/en/about/future"},{"text":"Contact Us","link":"/en/about/contacts"},{"text":"About this Document","link":"/en/about/about"}]}]},{"text":"Contact Us","link":"/en/about/contacts"}],"selectLanguageText":"English (US)","selectLanguageName":"English","editLinkText":"Edit this page on GitHub","tip":"Tips","warning":"Notice","danger":"Pay Attention"},"/zh-cn/":{"navbar":[{"text":"\u5BFC\u822A","children":[{"text":"\u5165\u95E8","children":[{"text":"\u4ECB\u7ECD","link":"/zh-cn/guide/home"},{"text":"\u5FEB\u901F\u5F00\u59CB","link":"/zh-cn/guide/quick-start"}]},{"text":"\u914D\u7F6E","children":[{"text":"API \u57FA\u672C\u914D\u7F6E","link":"/zh-cn/config/api-example"},{"text":"API \u5F02\u5E38\u5904\u7406","link":"/zh-cn/config/api-exception"}]},{"text":"API \u6587\u6863","children":[{"text":"\u6587\u6863\u4ECB\u7ECD","link":"/zh-cn/api/home"},{"text":"Public API","link":"/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection","activeMatch":"/zh-cn/api/public/"},{"text":"\u529F\u80FD\u4ECB\u7ECD","link":"/zh-cn/api/features"}]},{"text":"\u5173\u4E8E","children":[{"text":"\u66F4\u65B0\u65E5\u5FD7","link":"/zh-cn/about/changelog"},{"text":"\u5C55\u671B\u672A\u6765","link":"/zh-cn/about/future"},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"},{"text":"\u5173\u4E8E\u6B64\u6587\u6863","link":"/zh-cn/about/about"}]}]},{"text":"\u8054\u7CFB\u6211\u4EEC","link":"/zh-cn/about/contacts"}],"selectLanguageText":"\u7B80\u4F53\u4E2D\u6587 (CN)","selectLanguageName":"\u7B80\u4F53\u4E2D\u6587","editLinkText":"\u5728 GitHub \u4E0A\u7F16\u8F91\u6B64\u9875","notFound":["\u8FD9\u91CC\u4EC0\u4E48\u90FD\u6CA1\u6709","\u6211\u4EEC\u600E\u4E48\u5230\u8FD9\u6765\u4E86\uFF1F","\u8FD9\u662F\u4E00\u4E2A 404 \u9875\u9762","\u770B\u8D77\u6765\u6211\u4EEC\u8FDB\u5165\u4E86\u9519\u8BEF\u7684\u94FE\u63A5"],"backToHome":"\u56DE\u5230\u9996\u9875","contributorsText":"\u8D21\u732E\u8005","lastUpdatedText":"\u4E0A\u6B21\u66F4\u65B0","tip":"\u5C0F\u63D0\u793A","warning":"\u6CE8\u610F","danger":"\u7279\u522B\u6CE8\u610F","openInNewWindow":"\u5728\u65B0\u7A97\u53E3\u4E2D\u6253\u5F00","toggleColorMode":"\u5207\u6362\u989C\u8272\u6A21\u5F0F"},"/":{"selectLanguageName":"English"}},"colorMode":"auto","colorModeSwitch":true,"navbar":[],"selectLanguageText":"Languages","selectLanguageAriaLabel":"Select language","editLink":true,"editLinkText":"Edit this page","lastUpdated":true,"lastUpdatedText":"Last Updated","contributors":true,"contributorsText":"Contributors","notFound":["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."],"backToHome":"Take me home","openInNewWindow":"open in new window","toggleColorMode":"toggle color mode","toggleSidebar":"toggle sidebar"}`),Ls=ke(uh),dh=()=>Ls;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateThemeData=e=>{Ls.value=e});const Ps=Symbol(""),hh=()=>{const e=De(Ps);if(!e)throw new Error("useThemeLocaleData() is called without provider.");return e},fh=(e,t)=>{var l;return{...e,...(l=e.locales)==null?void 0:l[t]}},mh=Mt({enhance({app:e}){const t=dh(),l=e._context.provides[Vi],n=B(()=>fh(t.value,l.value));e.provide(Ps,n),Object.defineProperties(e.config.globalProperties,{$theme:{get(){return t.value}},$themeLocale:{get(){return n.value}}})}}),ph=he({__name:"Badge",props:{type:{type:String,required:!1,default:"tip"},text:{type:String,required:!1,default:""},vertical:{type:String,required:!1,default:void 0}},setup(e){return(t,l)=>(V(),X("span",{class:Ye(["badge",e.type]),style:Nl({verticalAlign:e.vertical})},[Re(t.$slots,"default",{},()=>[Dt(Se(e.text),1)])],6))}}),Le=(e,t)=>{const l=e.__vccOpts||e;for(const[n,i]of t)l[n]=i;return l},gh=Le(ph,[["__file","Badge.vue"]]),vh=he({name:"CodeGroup",setup(e,{slots:t}){const l=ke(-1),n=ke([]),i=(s=l.value)=>{s{s>0?l.value=s-1:l.value=n.value.length-1,n.value[l.value].focus()},r=(s,a)=>{s.key===" "||s.key==="Enter"?(s.preventDefault(),l.value=a):s.key==="ArrowRight"?(s.preventDefault(),i(a)):s.key==="ArrowLeft"&&(s.preventDefault(),o(a))};return()=>{var a;const s=(((a=t.default)==null?void 0:a.call(t))||[]).filter(c=>c.type.name==="CodeGroupItem").map(c=>(c.props===null&&(c.props={}),c));return s.length===0?null:(l.value<0||l.value>s.length-1?(l.value=s.findIndex(c=>c.props.active===""||c.props.active===!0),l.value===-1&&(l.value=0)):s.forEach((c,u)=>{c.props.active=u===l.value}),ue("div",{class:"code-group"},[ue("div",{class:"code-group__nav"},ue("ul",{class:"code-group__ul"},s.map((c,u)=>{const h=u===l.value;return ue("li",{class:"code-group__li"},ue("button",{ref:f=>{f&&(n.value[u]=f)},class:{"code-group__nav-tab":!0,"code-group__nav-tab-active":h},ariaPressed:h,ariaExpanded:h,onClick:()=>l.value=u,onKeydown:f=>r(f,u)},c.props.title))}))),s]))}}}),bh=["aria-selected"],_h=he({name:"CodeGroupItem"}),yh=he({..._h,props:{title:{type:String,required:!0},active:{type:Boolean,required:!1,default:!1}},setup(e){return(t,l)=>(V(),X("div",{class:Ye(["code-group-item",{"code-group-item__active":e.active}]),"aria-selected":e.active},[Re(t.$slots,"default")],10,bh))}}),kh=Le(yh,[["__file","CodeGroupItem.vue"]]);var Jo;const Os=typeof window<"u",xh=e=>typeof e=="function",Eh=e=>typeof e=="string",qn=()=>{};Os&&((Jo=window==null?void 0:window.navigator)==null?void 0:Jo.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function vn(e){return typeof e=="function"?e():A(e)}function Ch(e,t){function l(...n){e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})}return l}const As=e=>e();function Rh(e=As){const t=ke(!0);function l(){t.value=!1}function n(){t.value=!0}return{isActive:t,pause:l,resume:n,eventFilter:(...o)=>{t.value&&e(...o)}}}function wh(e){return e}function Is(e){return pa()?(ga(e),!0):!1}function Th(e,t=!0){Ai()?Wr(e):t?e():Hl(e)}function Lh(e,t=!0){Ai()?Ze(e):t?e():Hl(e)}function Ph(e=!1,t={}){const{truthyValue:l=!0,falsyValue:n=!1}=t,i=ze(e),o=ke(e);function r(s){if(arguments.length)return o.value=s,o.value;{const a=vn(l);return o.value=o.value===a?vn(n):a,o.value}}return i?r:[o,r]}var Zo=Object.getOwnPropertySymbols,Oh=Object.prototype.hasOwnProperty,Ah=Object.prototype.propertyIsEnumerable,Ih=(e,t)=>{var l={};for(var n in e)Oh.call(e,n)&&t.indexOf(n)<0&&(l[n]=e[n]);if(e!=null&&Zo)for(var n of Zo(e))t.indexOf(n)<0&&Ah.call(e,n)&&(l[n]=e[n]);return l};function Fh(e,t,l={}){const n=l,{eventFilter:i=As}=n,o=Ih(n,["eventFilter"]);return dt(e,Ch(i,t),o)}var Sh=Object.defineProperty,zh=Object.defineProperties,Dh=Object.getOwnPropertyDescriptors,bn=Object.getOwnPropertySymbols,Fs=Object.prototype.hasOwnProperty,Ss=Object.prototype.propertyIsEnumerable,Xo=(e,t,l)=>t in e?Sh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,Mh=(e,t)=>{for(var l in t||(t={}))Fs.call(t,l)&&Xo(e,l,t[l]);if(bn)for(var l of bn(t))Ss.call(t,l)&&Xo(e,l,t[l]);return e},Nh=(e,t)=>zh(e,Dh(t)),$h=(e,t)=>{var l={};for(var n in e)Fs.call(e,n)&&t.indexOf(n)<0&&(l[n]=e[n]);if(e!=null&&bn)for(var n of bn(e))t.indexOf(n)<0&&Ss.call(e,n)&&(l[n]=e[n]);return l};function Vh(e,t,l={}){const n=l,{eventFilter:i}=n,o=$h(n,["eventFilter"]),{eventFilter:r,pause:s,resume:a,isActive:c}=Rh(i);return{stop:Fh(e,t,Nh(Mh({},o),{eventFilter:r})),pause:s,resume:a,isActive:c}}function Hh(e){var t;const l=vn(e);return(t=l==null?void 0:l.$el)!=null?t:l}const _n=Os?window:void 0;function jh(...e){let t,l,n,i;if(Eh(e[0])?([l,n,i]=e,t=_n):[t,l,n,i]=e,!t)return qn;let o=qn;const r=dt(()=>Hh(t),a=>{o(),a&&(a.addEventListener(l,n,i),o=()=>{a.removeEventListener(l,n,i),o=qn})},{immediate:!0,flush:"post"}),s=()=>{r(),o()};return Is(s),s}function Bh(e,t=!1){const l=ke(),n=()=>l.value=Boolean(e());return n(),Lh(n,t),l}function Uh(e,t={}){const{window:l=_n}=t,n=Bh(()=>l&&"matchMedia"in l&&typeof l.matchMedia=="function");let i;const o=ke(!1),r=()=>{!n.value||(i||(i=l.matchMedia(e)),o.value=i.matches)};return Th(()=>{r(),i&&("addEventListener"in i?i.addEventListener("change",r):i.addListener(r),Is(()=>{"removeEventListener"in i?i.removeEventListener("change",r):i.removeListener(r)}))}),o}const hi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},fi="__vueuse_ssr_handlers__";hi[fi]=hi[fi]||{};const qh=hi[fi];function Kh(e,t){return qh[e]||t}function Wh(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"||Array.isArray(e)?"object":Number.isNaN(e)?"any":"number"}var Gh=Object.defineProperty,er=Object.getOwnPropertySymbols,Yh=Object.prototype.hasOwnProperty,Qh=Object.prototype.propertyIsEnumerable,tr=(e,t,l)=>t in e?Gh(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,lr=(e,t)=>{for(var l in t||(t={}))Yh.call(t,l)&&tr(e,l,t[l]);if(er)for(var l of er(t))Qh.call(t,l)&&tr(e,l,t[l]);return e};const Jh={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function Zh(e,t,l,n={}){var i;const{flush:o="pre",deep:r=!0,listenToStorageChanges:s=!0,writeDefaults:a=!0,mergeDefaults:c=!1,shallow:u,window:h=_n,eventFilter:f,onError:p=O=>{console.error(O)}}=n,k=(u?Ar:ke)(t);if(!l)try{l=Kh("getDefaultStorage",()=>{var O;return(O=_n)==null?void 0:O.localStorage})()}catch(O){p(O)}if(!l)return k;const R=vn(t),x=Wh(R),g=(i=n.serializer)!=null?i:Jh[x],{pause:b,resume:w}=Vh(k,()=>D(k.value),{flush:o,deep:r,eventFilter:f});return h&&s&&jh(h,"storage",ee),ee(),k;function D(O){try{O==null?l.removeItem(e):l.setItem(e,g.write(O))}catch(v){p(v)}}function q(O){if(!(O&&O.key!==e)){b();try{const v=O?O.newValue:l.getItem(e);if(v==null)return a&&R!==null&&l.setItem(e,g.write(R)),R;if(!O&&c){const G=g.read(v);return xh(c)?c(G,R):x==="object"&&!Array.isArray(G)?lr(lr({},R),G):G}else return typeof v!="string"?v:g.read(v)}catch(v){p(v)}finally{w()}}}function ee(O){O&&O.key!==e||(k.value=q(O))}}function Xh(e){return Uh("(prefers-color-scheme: dark)",e)}var nr;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(nr||(nr={}));var ef=Object.defineProperty,ir=Object.getOwnPropertySymbols,tf=Object.prototype.hasOwnProperty,lf=Object.prototype.propertyIsEnumerable,or=(e,t,l)=>t in e?ef(e,t,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[t]=l,nf=(e,t)=>{for(var l in t||(t={}))tf.call(t,l)&&or(e,l,t[l]);if(ir)for(var l of ir(t))lf.call(t,l)&&or(e,l,t[l]);return e};const of={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};nf({linear:wh},of);const je=()=>hh(),zs=Symbol(""),Di=()=>{const e=De(zs);if(!e)throw new Error("useDarkMode() is called without provider.");return e},rf=()=>{const e=je(),t=Xh(),l=Zh("vuepress-color-scheme",e.value.colorMode),n=B({get(){return e.value.colorModeSwitch?l.value==="auto"?t.value:l.value==="dark":e.value.colorMode==="dark"},set(i){i===t.value?l.value="auto":l.value=i?"dark":"light"}});Qt(zs,n),sf(n)},sf=e=>{const t=(l=e.value)=>{const n=window==null?void 0:window.document.querySelector("html");n==null||n.classList.toggle("dark",l)};Ze(()=>{dt(e,t,{immediate:!0})}),Ln(()=>t())},Ds=(...e)=>{const l=Xt().resolve(...e),n=l.matched[l.matched.length-1];if(!(n!=null&&n.redirect))return l;const{redirect:i}=n,o=re(i)?i(l):i,r=_e(o)?{path:o}:o;return Ds({hash:l.hash,query:l.query,params:l.params,...r})},Mi=e=>{const t=Ds(encodeURI(e));return{text:t.meta.title||e,link:t.name==="404"?e:t.fullPath}};let Kn=null,kl=null;const af={wait:()=>Kn,pending:()=>{Kn=new Promise(e=>kl=e)},resolve:()=>{kl==null||kl(),Kn=null,kl=null}},Ms=()=>af,Ns=Symbol("sidebarItems"),Ni=()=>{const e=De(Ns);if(!e)throw new Error("useSidebarItems() is called without provider.");return e},cf=()=>{const e=je(),t=bt(),l=B(()=>uf(t.value,e.value));Qt(Ns,l)},uf=(e,t)=>{var i,o,r,s;const l=(o=(i=e.sidebar)!=null?i:t.sidebar)!=null?o:"auto",n=(s=(r=e.sidebarDepth)!=null?r:t.sidebarDepth)!=null?s:2;return e.home||l===!1?[]:l==="auto"?hf(n):te(l)?$s(l,n):Ii(l)?ff(l,n):[]},df=(e,t)=>({text:e.title,link:e.link,children:$i(e.children,t)}),$i=(e,t)=>t>0?e.map(l=>df(l,t-1)):[],hf=e=>{const t=It();return[{text:t.value.title,children:$i(t.value.headers,e)}]},$s=(e,t)=>{const l=Nt(),n=It(),i=o=>{var s;let r;if(_e(o)?r=Mi(o):r=o,r.children)return{...r,children:r.children.map(a=>i(a))};if(r.link===l.path){const a=((s=n.value.headers[0])==null?void 0:s.level)===1?n.value.headers[0].children:n.value.headers;return{...r,children:$i(a,t)}}return r};return e.map(o=>i(o))},ff=(e,t)=>{var o;const l=Nt(),n=fs(e,l.path),i=(o=e[n])!=null?o:[];return $s(i,t)},mf={},pf={class:"theme-default-content"};function gf(e,t){const l=yt("Content");return V(),X("div",pf,[ie(l)])}const vf=Le(mf,[["render",gf],["__file","HomeContent.vue"]]),bf={key:0,class:"features"},_f=he({__name:"HomeFeatures",setup(e){const t=bt(),l=B(()=>te(t.value.features)?t.value.features:[]);return(n,i)=>A(l).length?(V(),X("div",bf,[(V(!0),X(we,null,St(A(l),o=>(V(),X("div",{key:o.title,class:"feature"},[pe("h2",null,Se(o.title),1),pe("p",null,Se(o.details),1)]))),128))])):Pe("v-if",!0)}}),yf=Le(_f,[["__file","HomeFeatures.vue"]]),kf=["innerHTML"],xf=["textContent"],Ef=he({__name:"HomeFooter",setup(e){const t=bt(),l=B(()=>t.value.footer),n=B(()=>t.value.footerHtml);return(i,o)=>A(l)?(V(),X(we,{key:0},[Pe(" eslint-disable-next-line vue/no-v-html "),A(n)?(V(),X("div",{key:0,class:"footer",innerHTML:A(l)},null,8,kf)):(V(),X("div",{key:1,class:"footer",textContent:Se(A(l))},null,8,xf))],64)):Pe("v-if",!0)}}),Cf=Le(Ef,[["__file","HomeFooter.vue"]]),Rf=["href","rel","target","aria-label"],wf=he({inheritAttrs:!1}),Tf=he({...wf,__name:"AutoLink",props:{item:{type:Object,required:!0}},setup(e){const t=e,l=Nt(),n=Qs(),{item:i}=Cn(t),o=B(()=>ql(i.value.link)),r=B(()=>Au(i.value.link)||Iu(i.value.link)),s=B(()=>{if(!r.value){if(i.value.target)return i.value.target;if(o.value)return"_blank"}}),a=B(()=>s.value==="_blank"),c=B(()=>!o.value&&!r.value&&!a.value),u=B(()=>{if(!r.value){if(i.value.rel)return i.value.rel;if(a.value)return"noopener noreferrer"}}),h=B(()=>i.value.ariaLabel||i.value.text),f=B(()=>{const R=Object.keys(n.value.locales);return R.length?!R.some(x=>x===i.value.link):i.value.link!=="/"}),p=B(()=>f.value?l.path.startsWith(i.value.link):!1),k=B(()=>c.value?i.value.activeMatch?new RegExp(i.value.activeMatch).test(l.path):p.value:!1);return(R,x)=>{const g=yt("RouterLink"),b=yt("AutoLinkExternalIcon");return A(c)?(V(),Ae(g,ri({key:0,class:{"router-link-active":A(k)},to:A(i).link,"aria-label":A(h)},R.$attrs),{default:Me(()=>[Re(R.$slots,"before"),Dt(" "+Se(A(i).text)+" ",1),Re(R.$slots,"after")]),_:3},16,["class","to","aria-label"])):(V(),X("a",ri({key:1,class:"external-link",href:A(i).link,rel:A(u),target:A(s),"aria-label":A(h)},R.$attrs),[Re(R.$slots,"before"),Dt(" "+Se(A(i).text)+" ",1),A(a)?(V(),Ae(b,{key:0})):Pe("v-if",!0),Re(R.$slots,"after")],16,Rf))}}}),vt=Le(Tf,[["__file","AutoLink.vue"]]),Lf={class:"hero"},Pf={key:0,id:"main-title"},Of={key:1,class:"description"},Af={key:2,class:"actions"},If=he({__name:"HomeHero",setup(e){const t=bt(),l=Hi(),n=Di(),i=B(()=>n.value&&t.value.heroImageDark!==void 0?t.value.heroImageDark:t.value.heroImage),o=B(()=>t.value.heroText===null?null:t.value.heroText||l.value.title||"Hello"),r=B(()=>t.value.heroAlt||o.value||"hero"),s=B(()=>t.value.tagline===null?null:t.value.tagline||l.value.description||"Welcome to your VuePress site"),a=B(()=>te(t.value.actions)?t.value.actions.map(({text:u,link:h,type:f="primary"})=>({text:u,link:h,type:f})):[]),c=()=>{if(!i.value)return null;const u=ue("img",{src:Bi(i.value),alt:r.value});return t.value.heroImageDark===void 0?u:ue(ji,()=>u)};return(u,h)=>(V(),X("header",Lf,[ie(c),A(o)?(V(),X("h1",Pf,Se(A(o)),1)):Pe("v-if",!0),A(s)?(V(),X("p",Of,Se(A(s)),1)):Pe("v-if",!0),A(a).length?(V(),X("p",Af,[(V(!0),X(we,null,St(A(a),f=>(V(),Ae(vt,{key:f.text,class:Ye(["action-button",[f.type]]),item:f},null,8,["class","item"]))),128))])):Pe("v-if",!0)]))}}),Ff=Le(If,[["__file","HomeHero.vue"]]),Sf={class:"home"},zf=he({__name:"Home",setup(e){return(t,l)=>(V(),X("main",Sf,[ie(Ff),ie(yf),ie(vf),ie(Cf)]))}}),Df=Le(zf,[["__file","Home.vue"]]),Mf=he({__name:"NavbarBrand",setup(e){const t=Kl(),l=Hi(),n=je(),i=Di(),o=B(()=>n.value.home||t.value),r=B(()=>l.value.title),s=B(()=>i.value&&n.value.logoDark!==void 0?n.value.logoDark:n.value.logo),a=()=>{if(!s.value)return null;const c=ue("img",{class:"logo",src:Bi(s.value),alt:r.value});return n.value.logoDark===void 0?c:ue(ji,()=>c)};return(c,u)=>{const h=yt("RouterLink");return V(),Ae(h,{to:A(o)},{default:Me(()=>[ie(a),A(r)?(V(),X("span",{key:0,class:Ye(["site-name",{"can-hide":A(s)}])},Se(A(r)),3)):Pe("v-if",!0)]),_:1},8,["to"])}}}),Nf=Le(Mf,[["__file","NavbarBrand.vue"]]),$f=he({__name:"DropdownTransition",setup(e){const t=n=>{n.style.height=n.scrollHeight+"px"},l=n=>{n.style.height=""};return(n,i)=>(V(),Ae(Ul,{name:"dropdown",onEnter:t,onAfterEnter:l,onBeforeLeave:t},{default:Me(()=>[Re(n.$slots,"default")]),_:3}))}}),Vs=Le($f,[["__file","DropdownTransition.vue"]]),Vf=["aria-label"],Hf={class:"title"},jf=pe("span",{class:"arrow down"},null,-1),Bf=["aria-label"],Uf={class:"title"},qf={class:"navbar-dropdown"},Kf={class:"navbar-dropdown-subtitle"},Wf={key:1},Gf={class:"navbar-dropdown-subitem-wrapper"},Yf=he({__name:"NavbarDropdown",props:{item:{type:Object,required:!0}},setup(e){const t=e,{item:l}=Cn(t),n=B(()=>l.value.ariaLabel||l.value.text),i=ke(!1),o=Nt();dt(()=>o.path,()=>{i.value=!1});const r=a=>{a.detail===0?i.value=!i.value:i.value=!1},s=(a,c)=>c[c.length-1]===a;return(a,c)=>(V(),X("div",{class:Ye(["navbar-dropdown-wrapper",{open:i.value}])},[pe("button",{class:"navbar-dropdown-title",type:"button","aria-label":A(n),onClick:r},[pe("span",Hf,Se(A(l).text),1),jf],8,Vf),pe("button",{class:"navbar-dropdown-title-mobile",type:"button","aria-label":A(n),onClick:c[0]||(c[0]=u=>i.value=!i.value)},[pe("span",Uf,Se(A(l).text),1),pe("span",{class:Ye(["arrow",i.value?"down":"right"])},null,2)],8,Bf),ie(Vs,null,{default:Me(()=>[un(pe("ul",qf,[(V(!0),X(we,null,St(A(l).children,u=>(V(),X("li",{key:u.text,class:"navbar-dropdown-item"},[u.children?(V(),X(we,{key:0},[pe("h4",Kf,[u.link?(V(),Ae(vt,{key:0,item:u,onFocusout:h=>s(u,A(l).children)&&u.children.length===0&&(i.value=!1)},null,8,["item","onFocusout"])):(V(),X("span",Wf,Se(u.text),1))]),pe("ul",Gf,[(V(!0),X(we,null,St(u.children,h=>(V(),X("li",{key:h.link,class:"navbar-dropdown-subitem"},[ie(vt,{item:h,onFocusout:f=>s(h,u.children)&&s(u,A(l).children)&&(i.value=!1)},null,8,["item","onFocusout"])]))),128))])],64)):(V(),Ae(vt,{key:1,item:u,onFocusout:h=>s(u,A(l).children)&&(i.value=!1)},null,8,["item","onFocusout"]))]))),128))],512),[[pn,i.value]])]),_:1})],2))}}),Qf=Le(Yf,[["__file","NavbarDropdown.vue"]]),rr=e=>decodeURI(e).replace(/#.*$/,"").replace(/(index)?\.(md|html)$/,""),Jf=(e,t)=>{if(t.hash===e)return!0;const l=rr(t.path),n=rr(e);return l===n},Hs=(e,t)=>e.link&&Jf(e.link,t)?!0:e.children?e.children.some(l=>Hs(l,t)):!1,js=e=>!ql(e)||/github\.com/.test(e)?"GitHub":/bitbucket\.org/.test(e)?"Bitbucket":/gitlab\.com/.test(e)?"GitLab":/gitee\.com/.test(e)?"Gitee":null,Zf={GitHub:":repo/edit/:branch/:path",GitLab:":repo/-/edit/:branch/:path",Gitee:":repo/edit/:branch/:path",Bitbucket:":repo/src/:branch/:path?mode=edit&spa=0&at=:branch&fileviewer=file-view-default"},Xf=({docsRepo:e,editLinkPattern:t})=>{if(t)return t;const l=js(e);return l!==null?Zf[l]:null},em=({docsRepo:e,docsBranch:t,docsDir:l,filePathRelative:n,editLinkPattern:i})=>{if(!n)return null;const o=Xf({docsRepo:e,editLinkPattern:i});return o?o.replace(/:repo/,ql(e)?e:`https://github.com/${e}`).replace(/:branch/,t).replace(/:path/,hs(`${ds(l)}/${n}`)):null},tm={key:0,class:"navbar-items"},lm=he({__name:"NavbarItems",setup(e){const t=()=>{const c=Xt(),u=Kl(),h=Hi(),f=je();return B(()=>{var b,w,D;const p=Object.keys(h.value.locales);if(p.length<2)return[];const k=c.currentRoute.value.path,R=c.currentRoute.value.fullPath,x=c.currentRoute.value.hash;return[{text:(b=f.value.selectLanguageText)!=null?b:"unknown language",ariaLabel:(D=(w=f.value.selectLanguageAriaLabel)!=null?w:f.value.selectLanguageText)!=null?D:"unknown language",children:p.map(q=>{var Q,E,M,I,se,H;const ee=(E=(Q=h.value.locales)==null?void 0:Q[q])!=null?E:{},O=(I=(M=f.value.locales)==null?void 0:M[q])!=null?I:{},v=`${ee.lang}`,G=(se=O.selectLanguageName)!=null?se:v;let U;if(v===h.value.lang)U=R;else{const le=k.replace(u.value,q);c.getRoutes().some(ae=>ae.path===le)?U=`${le}${x}`:U=(H=O.home)!=null?H:q}return{text:G,link:U}})}]})},l=()=>{const c=je(),u=B(()=>c.value.repo),h=B(()=>u.value?js(u.value):null),f=B(()=>u.value&&!ql(u.value)?`https://github.com/${u.value}`:u.value),p=B(()=>f.value?c.value.repoLabel?c.value.repoLabel:h.value===null?"Source":h.value:null);return B(()=>!f.value||!p.value?[]:[{text:p.value,link:f.value}])},n=c=>_e(c)?Mi(c):c.children?{...c,children:c.children.map(n)}:c,o=(()=>{const c=je();return B(()=>(c.value.navbar||[]).map(n))})(),r=t(),s=l(),a=B(()=>[...o.value,...r.value,...s.value]);return(c,u)=>A(a).length?(V(),X("nav",tm,[(V(!0),X(we,null,St(A(a),h=>(V(),X("div",{key:h.text,class:"navbar-item"},[h.children?(V(),Ae(Qf,{key:0,item:h},null,8,["item"])):(V(),Ae(vt,{key:1,item:h},null,8,["item"]))]))),128))])):Pe("v-if",!0)}}),Bs=Le(lm,[["__file","NavbarItems.vue"]]),nm=["title"],im={class:"icon",focusable:"false",viewBox:"0 0 32 32"},om=Hc('',9),rm=[om],sm={class:"icon",focusable:"false",viewBox:"0 0 32 32"},am=pe("path",{d:"M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z",fill:"currentColor"},null,-1),cm=[am],um=he({__name:"ToggleColorModeButton",setup(e){const t=je(),l=Di(),n=()=>{l.value=!l.value};return(i,o)=>(V(),X("button",{class:"toggle-color-mode-button",title:A(t).toggleColorMode,onClick:n},[un((V(),X("svg",im,rm,512)),[[pn,!A(l)]]),un((V(),X("svg",sm,cm,512)),[[pn,A(l)]])],8,nm))}}),dm=Le(um,[["__file","ToggleColorModeButton.vue"]]),hm=["title"],fm=pe("div",{class:"icon","aria-hidden":"true"},[pe("span"),pe("span"),pe("span")],-1),mm=[fm],pm=he({__name:"ToggleSidebarButton",emits:["toggle"],setup(e){const t=je();return(l,n)=>(V(),X("div",{class:"toggle-sidebar-button",title:A(t).toggleSidebar,"aria-expanded":"false",role:"button",tabindex:"0",onClick:n[0]||(n[0]=i=>l.$emit("toggle"))},mm,8,hm))}}),gm=Le(pm,[["__file","ToggleSidebarButton.vue"]]),vm=he({__name:"Navbar",emits:["toggle-sidebar"],setup(e){const t=je(),l=ke(null),n=ke(null),i=ke(0),o=B(()=>i.value?{maxWidth:i.value+"px"}:{});Ze(()=>{const a=r(l.value,"paddingLeft")+r(l.value,"paddingRight"),c=()=>{var u;window.innerWidth<=719?i.value=0:i.value=l.value.offsetWidth-a-(((u=n.value)==null?void 0:u.offsetWidth)||0)};c(),window.addEventListener("resize",c,!1),window.addEventListener("orientationchange",c,!1)});function r(s,a){var h,f,p;const c=(p=(f=(h=s==null?void 0:s.ownerDocument)==null?void 0:h.defaultView)==null?void 0:f.getComputedStyle(s,null))==null?void 0:p[a],u=Number.parseInt(c,10);return Number.isNaN(u)?0:u}return(s,a)=>{const c=yt("NavbarSearch");return V(),X("header",{ref_key:"navbar",ref:l,class:"navbar"},[ie(gm,{onToggle:a[0]||(a[0]=u=>s.$emit("toggle-sidebar"))}),pe("span",{ref_key:"navbarBrand",ref:n},[ie(Nf)],512),pe("div",{class:"navbar-items-wrapper",style:Nl(A(o))},[Re(s.$slots,"before"),ie(Bs,{class:"can-hide"}),Re(s.$slots,"after"),A(t).colorModeSwitch?(V(),Ae(dm,{key:0})):Pe("v-if",!0),ie(c)],4)],512)}}}),bm=Le(vm,[["__file","Navbar.vue"]]),_m={class:"page-meta"},ym={key:0,class:"meta-item edit-link"},km={key:1,class:"meta-item last-updated"},xm={class:"meta-item-label"},Em={class:"meta-item-info"},Cm={key:2,class:"meta-item contributors"},Rm={class:"meta-item-label"},wm={class:"meta-item-info"},Tm=["title"],Lm=Dt(", "),Pm=he({__name:"PageMeta",setup(e){const t=()=>{const a=je(),c=It(),u=bt();return B(()=>{var b,w,D;if(!((w=(b=u.value.editLink)!=null?b:a.value.editLink)!=null?w:!0))return null;const{repo:f,docsRepo:p=f,docsBranch:k="main",docsDir:R="",editLinkText:x}=a.value;if(!p)return null;const g=em({docsRepo:p,docsBranch:k,docsDir:R,filePathRelative:c.value.filePathRelative,editLinkPattern:(D=u.value.editLinkPattern)!=null?D:a.value.editLinkPattern});return g?{text:x!=null?x:"Edit this page",link:g}:null})},l=()=>{const a=je(),c=It(),u=bt();return B(()=>{var p,k,R,x;return!((k=(p=u.value.lastUpdated)!=null?p:a.value.lastUpdated)!=null?k:!0)||!((R=c.value.git)!=null&&R.updatedTime)?null:new Date((x=c.value.git)==null?void 0:x.updatedTime).toLocaleString()})},n=()=>{const a=je(),c=It(),u=bt();return B(()=>{var f,p,k,R;return((p=(f=u.value.contributors)!=null?f:a.value.contributors)!=null?p:!0)&&(R=(k=c.value.git)==null?void 0:k.contributors)!=null?R:null})},i=je(),o=t(),r=l(),s=n();return(a,c)=>{const u=yt("ClientOnly");return V(),X("footer",_m,[A(o)?(V(),X("div",ym,[ie(vt,{class:"meta-item-label",item:A(o)},null,8,["item"])])):Pe("v-if",!0),A(r)?(V(),X("div",km,[pe("span",xm,Se(A(i).lastUpdatedText)+": ",1),ie(u,null,{default:Me(()=>[pe("span",Em,Se(A(r)),1)]),_:1})])):Pe("v-if",!0),A(s)&&A(s).length?(V(),X("div",Cm,[pe("span",Rm,Se(A(i).contributorsText)+": ",1),pe("span",wm,[(V(!0),X(we,null,St(A(s),(h,f)=>(V(),X(we,{key:f},[pe("span",{class:"contributor",title:`email: ${h.email}`},Se(h.name),9,Tm),f!==A(s).length-1?(V(),X(we,{key:0},[Lm],64)):Pe("v-if",!0)],64))),128))])])):Pe("v-if",!0)])}}}),Om=Le(Pm,[["__file","PageMeta.vue"]]),Am={key:0,class:"page-nav"},Im={class:"inner"},Fm={key:0,class:"prev"},Sm={key:1,class:"next"},zm=he({__name:"PageNav",setup(e){const t=a=>a===!1?null:_e(a)?Mi(a):Ii(a)?a:!1,l=(a,c,u)=>{const h=a.findIndex(f=>f.link===c);if(h!==-1){const f=a[h+u];return f!=null&&f.link?f:null}for(const f of a)if(f.children){const p=l(f.children,c,u);if(p)return p}return null},n=bt(),i=Ni(),o=Nt(),r=B(()=>{const a=t(n.value.prev);return a!==!1?a:l(i.value,o.path,-1)}),s=B(()=>{const a=t(n.value.next);return a!==!1?a:l(i.value,o.path,1)});return(a,c)=>A(r)||A(s)?(V(),X("nav",Am,[pe("p",Im,[A(r)?(V(),X("span",Fm,[ie(vt,{item:A(r)},null,8,["item"])])):Pe("v-if",!0),A(s)?(V(),X("span",Sm,[ie(vt,{item:A(s)},null,8,["item"])])):Pe("v-if",!0)])])):Pe("v-if",!0)}}),Dm=Le(zm,[["__file","PageNav.vue"]]),Mm={class:"page"},Nm={class:"theme-default-content"},$m=he({__name:"Page",setup(e){return(t,l)=>{const n=yt("Content");return V(),X("main",Mm,[Re(t.$slots,"top"),pe("div",Nm,[Re(t.$slots,"content-top"),ie(n),Re(t.$slots,"content-bottom")]),ie(Om),ie(Dm),Re(t.$slots,"bottom")])}}}),Vm=Le($m,[["__file","Page.vue"]]),Hm=["onKeydown"],jm={class:"sidebar-item-children"},Bm=he({__name:"SidebarItem",props:{item:{type:Object,required:!0},depth:{type:Number,required:!1,default:0}},setup(e){const t=e,{item:l,depth:n}=Cn(t),i=Nt(),o=Xt(),r=B(()=>Hs(l.value,i)),s=B(()=>({"sidebar-item":!0,"sidebar-heading":n.value===0,active:r.value,collapsible:l.value.collapsible})),a=B(()=>l.value.collapsible?r.value:!0),[c,u]=Ph(a.value),h=p=>{l.value.collapsible&&(p.preventDefault(),u())},f=o.afterEach(p=>{Hl(()=>{c.value=a.value})});return Bl(()=>{f()}),(p,k)=>{var x;const R=yt("SidebarItem",!0);return V(),X("li",null,[A(l).link?(V(),Ae(vt,{key:0,class:Ye(A(s)),item:A(l)},null,8,["class","item"])):(V(),X("p",{key:1,tabindex:"0",class:Ye(A(s)),onClick:h,onKeydown:Eu(h,["enter"])},[Dt(Se(A(l).text)+" ",1),A(l).collapsible?(V(),X("span",{key:0,class:Ye(["arrow",A(c)?"down":"right"])},null,2)):Pe("v-if",!0)],42,Hm)),(x=A(l).children)!=null&&x.length?(V(),Ae(Vs,{key:2},{default:Me(()=>[un(pe("ul",jm,[(V(!0),X(we,null,St(A(l).children,g=>(V(),Ae(R,{key:`${A(n)}${g.text}${g.link}`,item:g,depth:A(n)+1},null,8,["item","depth"]))),128))],512),[[pn,A(c)]])]),_:1})):Pe("v-if",!0)])}}}),Um=Le(Bm,[["__file","SidebarItem.vue"]]),qm={key:0,class:"sidebar-items"},Km=he({__name:"SidebarItems",setup(e){const t=Nt(),l=Ni();return Ze(()=>{dt(()=>t.hash,n=>{const i=document.querySelector(".sidebar");if(!i)return;const o=document.querySelector(`.sidebar a.sidebar-item[href="${t.path}${n}"]`);if(!o)return;const{top:r,height:s}=i.getBoundingClientRect(),{top:a,height:c}=o.getBoundingClientRect();ar+s&&o.scrollIntoView(!1)})}),(n,i)=>A(l).length?(V(),X("ul",qm,[(V(!0),X(we,null,St(A(l),o=>(V(),Ae(Um,{key:`${o.text}${o.link}`,item:o},null,8,["item"]))),128))])):Pe("v-if",!0)}}),Wm=Le(Km,[["__file","SidebarItems.vue"]]),Gm={class:"sidebar"},Ym=he({__name:"Sidebar",setup(e){return(t,l)=>(V(),X("aside",Gm,[ie(Bs),Re(t.$slots,"top"),ie(Wm),Re(t.$slots,"bottom")]))}}),Qm=Le(Ym,[["__file","Sidebar.vue"]]),Jm=he({__name:"Layout",setup(e){const t=It(),l=bt(),n=je(),i=B(()=>l.value.navbar!==!1&&n.value.navbar!==!1),o=Ni(),r=ke(!1),s=x=>{r.value=typeof x=="boolean"?x:!r.value},a={x:0,y:0},c=x=>{a.x=x.changedTouches[0].clientX,a.y=x.changedTouches[0].clientY},u=x=>{const g=x.changedTouches[0].clientX-a.x,b=x.changedTouches[0].clientY-a.y;Math.abs(g)>Math.abs(b)&&Math.abs(g)>40&&(g>0&&a.x<=80?s(!0):s(!1))},h=B(()=>[{"no-navbar":!i.value,"no-sidebar":!o.value.length,"sidebar-open":r.value},l.value.pageClass]);let f;Ze(()=>{f=Xt().afterEach(()=>{s(!1)})}),Ln(()=>{f()});const p=Ms(),k=p.resolve,R=p.pending;return(x,g)=>(V(),X("div",{class:Ye(["theme-container",A(h)]),onTouchstart:c,onTouchend:u},[Re(x.$slots,"navbar",{},()=>[A(i)?(V(),Ae(bm,{key:0,onToggleSidebar:s},{before:Me(()=>[Re(x.$slots,"navbar-before")]),after:Me(()=>[Re(x.$slots,"navbar-after")]),_:3})):Pe("v-if",!0)]),pe("div",{class:"sidebar-mask",onClick:g[0]||(g[0]=b=>s(!1))}),Re(x.$slots,"sidebar",{},()=>[ie(Qm,null,{top:Me(()=>[Re(x.$slots,"sidebar-top")]),bottom:Me(()=>[Re(x.$slots,"sidebar-bottom")]),_:3})]),Re(x.$slots,"page",{},()=>[A(l).home?(V(),Ae(Df,{key:0})):(V(),Ae(Ul,{key:1,name:"fade-slide-y",mode:"out-in",onBeforeEnter:A(k),onBeforeLeave:A(R)},{default:Me(()=>[(V(),Ae(Vm,{key:A(t).path},{top:Me(()=>[Re(x.$slots,"page-top")]),"content-top":Me(()=>[Re(x.$slots,"page-content-top")]),"content-bottom":Me(()=>[Re(x.$slots,"page-content-bottom")]),bottom:Me(()=>[Re(x.$slots,"page-bottom")]),_:3}))]),_:3},8,["onBeforeEnter","onBeforeLeave"]))])],34))}}),Zm=Le(Jm,[["__file","Layout.vue"]]),Xm={class:"theme-container"},ep={class:"page"},tp={class:"theme-default-content"},lp=pe("h1",null,"404",-1),np=he({__name:"NotFound",setup(e){var s,a,c;const t=Kl(),l=je(),n=(s=l.value.notFound)!=null?s:["Not Found"],i=()=>n[Math.floor(Math.random()*n.length)],o=(a=l.value.home)!=null?a:t.value,r=(c=l.value.backToHome)!=null?c:"Back to home";return(u,h)=>{const f=yt("RouterLink");return V(),X("div",Xm,[pe("main",ep,[pe("div",tp,[lp,pe("blockquote",null,Se(i()),1),ie(f,{to:A(o)},{default:Me(()=>[Dt(Se(A(r)),1)]),_:1},8,["to"])])])])}}}),ip=Le(np,[["__file","NotFound.vue"]]);const op=Mt({enhance({app:e,router:t}){e.component("Badge",gh),e.component("CodeGroup",vh),e.component("CodeGroupItem",kh),e.component("AutoLinkExternalIcon",()=>{const n=e.component("ExternalLinkIcon");return n?ue(n):null}),e.component("NavbarSearch",()=>{const n=e.component("Docsearch")||e.component("SearchBox");return n?ue(n):null});const l=t.options.scrollBehavior;t.options.scrollBehavior=async(...n)=>(await Ms().wait(),l(...n))},setup(){rf(),cf()},layouts:{Layout:Zm,NotFound:ip}}),rp=(e,t)=>t.some(l=>{if(_e(l))return l===e.key;const{key:n,ctrl:i=!1,shift:o=!1,alt:r=!1}=l;return n===e.key&&i===e.ctrlKey&&o===e.shiftKey&&r===e.altKey}),sp=/[^\x00-\x7F]/,ap=e=>e.split(/\s+/g).map(t=>t.trim()).filter(t=>!!t),sr=e=>e.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),ar=(e,t)=>{const l=t.join(" "),n=ap(e);if(sp.test(e))return n.some(r=>l.toLowerCase().indexOf(r)>-1);const i=e.endsWith(" ");return new RegExp(n.map((r,s)=>n.length===s+1&&!i?`(?=.*\\b${sr(r)})`:`(?=.*\\b${sr(r)}\\b)`).join("")+".+","gi").test(l)},cp=({input:e,hotKeys:t})=>{if(t.value.length===0)return;const l=n=>{!e.value||rp(n,t.value)&&!e.value.contains(n.target)&&(n.preventDefault(),e.value.focus())};Ze(()=>{document.addEventListener("keydown",l)}),Bl(()=>{document.removeEventListener("keydown",l)})},up=[{title:"Home",headers:[{level:3,title:"Bring it on! Let reflection become poetic and picturesque",slug:"bring-it-on-let-reflection-become-poetic-and-picturesque",link:"#bring-it-on-let-reflection-become-poetic-and-picturesque",children:[]}],path:"/en/",pathLocale:"/en/",extraFields:[]},{title:"\u9996\u9875",headers:[{level:3,title:"\u6765\u5427\uFF01\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F",slug:"\u6765\u5427-\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F",link:"#\u6765\u5427-\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F",children:[]}],path:"/zh-cn/",pathLocale:"/zh-cn/",extraFields:[]},{title:"About this Document",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/en/about/about.html",pathLocale:"/en/",extraFields:[]},{title:"Changelog",headers:[{level:3,title:"1.0.2 | 2023.04.25",slug:"_1-0-2-2023-04-25",link:"#_1-0-2-2023-04-25",children:[]},{level:3,title:"1.0.1 | 2023.04.16",slug:"_1-0-1-2023-04-16",link:"#_1-0-1-2023-04-16",children:[]},{level:3,title:"1.0.0 | 2023.01.26",slug:"_1-0-0-2023-01-26",link:"#_1-0-0-2023-01-26",children:[]}],path:"/en/about/changelog.html",pathLocale:"/en/",extraFields:[]},{title:"Contact Us",headers:[{level:2,title:"Help with Maintenance",slug:"help-with-maintenance",link:"#help-with-maintenance",children:[]}],path:"/en/about/contacts.html",pathLocale:"/en/",extraFields:[]},{title:"Looking for Future",headers:[{level:2,title:"Future Plans",slug:"future-plans",link:"#future-plans",children:[{level:3,title:"Automatically Generate Reflection Code",slug:"automatically-generate-reflection-code",link:"#automatically-generate-reflection-code",children:[]}]}],path:"/en/about/future.html",pathLocale:"/en/",extraFields:[]},{title:"Features",headers:[{level:2,title:"Class Extensions",slug:"class-extensions",link:"#class-extensions",children:[{level:3,title:"Object Conversion",slug:"object-conversion",link:"#object-conversion",children:[]},{level:3,title:"Existential Judgment",slug:"existential-judgment",link:"#existential-judgment",children:[]},{level:3,title:"Vague Search",slug:"vague-search",link:"#vague-search",children:[]}]},{level:2,title:"Member Extensions",slug:"member-extensions",link:"#member-extensions",children:[{level:3,title:"Find and Reflection",slug:"find-and-reflection",link:"#find-and-reflection",children:[]},{level:3,title:"Optional Find Conditions",slug:"optional-find-conditions",link:"#optional-find-conditions",children:[]},{level:3,title:"Find in Super Class",slug:"find-in-super-class",link:"#find-in-super-class",children:[]},{level:3,title:"Vague Find",slug:"vague-find",link:"#vague-find",children:[]},{level:3,title:"Multiple Find",slug:"multiple-find",link:"#multiple-find",children:[]},{level:3,title:"Static Bytecode",slug:"static-bytecode",link:"#static-bytecode",children:[]},{level:3,title:"Obfuscated Bytecode",slug:"obfuscated-bytecode",link:"#obfuscated-bytecode",children:[]},{level:3,title:"Directly Called",slug:"directly-called",link:"#directly-called",children:[]},{level:3,title:"Find Again",slug:"find-again",link:"#find-again",children:[]},{level:3,title:"Relative Matching",slug:"relative-matching",link:"#relative-matching",children:[]},{level:3,title:"Calling Generics",slug:"calling-generics",link:"#calling-generics",children:[]},{level:3,title:"Pay Attention of Trap",slug:"pay-attention-of-trap",link:"#pay-attention-of-trap",children:[]}]},{level:2,title:"Common Type Extensions",slug:"common-type-extensions",link:"#common-type-extensions",children:[]}],path:"/en/api/features.html",pathLocale:"/en/",extraFields:[]},{title:"Document Introduce",headers:[{level:2,title:"Function Description",slug:"function-description",link:"#function-description",children:[]},{level:2,title:"Function Example Description",slug:"function-example-description",link:"#function-example-description",children:[]},{level:2,title:"Change Record Description",slug:"change-record-description",link:"#change-record-description",children:[]},{level:2,title:"Related Symbols Description",slug:"related-symbols-description",link:"#related-symbols-description",children:[]}],path:"/en/api/home.html",pathLocale:"/en/",extraFields:[]},{title:"API Basic Configs",headers:[{level:2,title:"Get the API Version",slug:"get-the-api-version",link:"#get-the-api-version",children:[]},{level:2,title:"Configure API Related Functions",slug:"configure-api-related-functions",link:"#configure-api-related-functions",children:[{level:3,title:"Custom Debug Log Tag",slug:"custom-debug-log-tag",link:"#custom-debug-log-tag",children:[]},{level:3,title:"Enable or Disable Debug Mode",slug:"enable-or-disable-debug-mode",link:"#enable-or-disable-debug-mode",children:[]},{level:3,title:"Enable or Disable Debug Logs",slug:"enable-or-disable-debug-logs",link:"#enable-or-disable-debug-logs",children:[]},{level:3,title:"Use the configs Method to Configure",slug:"use-the-configs-method-to-configure",link:"#use-the-configs-method-to-configure",children:[]}]}],path:"/en/config/api-example.html",pathLocale:"/en/",extraFields:[]},{title:"API Exception Handling",headers:[{level:2,title:"Non-Blocking Exceptions",slug:"non-blocking-exceptions",link:"#non-blocking-exceptions",children:[]},{level:2,title:"Blocking Exceptions",slug:"blocking-exceptions",link:"#blocking-exceptions",children:[]}],path:"/en/config/api-exception.html",pathLocale:"/en/",extraFields:[]},{title:"Introduce",headers:[{level:2,title:"Background",slug:"background",link:"#background",children:[]},{level:2,title:"Usage",slug:"usage",link:"#usage",children:[]},{level:2,title:"Language Requirement",slug:"language-requirement",link:"#language-requirement",children:[]},{level:2,title:"Source of Inspiration",slug:"source-of-inspiration",link:"#source-of-inspiration",children:[]}],path:"/en/guide/home.html",pathLocale:"/en/",extraFields:[]},{title:"Quick Start",headers:[{level:2,title:"Environment Requirements",slug:"environment-requirements",link:"#environment-requirements",children:[]},{level:2,title:"Project Requirements",slug:"project-requirements",link:"#project-requirements",children:[]},{level:2,title:"Integration Dependencies",slug:"integration-dependencies",link:"#integration-dependencies",children:[]}],path:"/en/guide/quick-start.html",pathLocale:"/en/",extraFields:[]},{title:"\u5173\u4E8E\u6B64\u6587\u6863",headers:[{level:2,title:"License",slug:"license",link:"#license",children:[]}],path:"/zh-cn/about/about.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u66F4\u65B0\u65E5\u5FD7",headers:[{level:3,title:"1.0.2 | 2023.04.25",slug:"_1-0-2-2023-04-25",link:"#_1-0-2-2023-04-25",children:[]},{level:3,title:"1.0.1 | 2023.04.16",slug:"_1-0-1-2023-04-16",link:"#_1-0-1-2023-04-16",children:[]},{level:3,title:"1.0.0 | 2023.01.26",slug:"_1-0-0-2023-01-26",link:"#_1-0-0-2023-01-26",children:[]}],path:"/zh-cn/about/changelog.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u8054\u7CFB\u6211\u4EEC",headers:[{level:2,title:"\u52A9\u529B\u7EF4\u62A4",slug:"\u52A9\u529B\u7EF4\u62A4",link:"#\u52A9\u529B\u7EF4\u62A4",children:[]}],path:"/zh-cn/about/contacts.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5C55\u671B\u672A\u6765",headers:[{level:2,title:"\u672A\u6765\u7684\u8BA1\u5212",slug:"\u672A\u6765\u7684\u8BA1\u5212",link:"#\u672A\u6765\u7684\u8BA1\u5212",children:[{level:3,title:"\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801",slug:"\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801",link:"#\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801",children:[]}]}],path:"/zh-cn/about/future.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u529F\u80FD\u4ECB\u7ECD",headers:[{level:2,title:"Class \u6269\u5C55",slug:"class-\u6269\u5C55",link:"#class-\u6269\u5C55",children:[{level:3,title:"\u5BF9\u8C61\u8F6C\u6362",slug:"\u5BF9\u8C61\u8F6C\u6362",link:"#\u5BF9\u8C61\u8F6C\u6362",children:[]},{level:3,title:"\u5B58\u5728\u5224\u65AD",slug:"\u5B58\u5728\u5224\u65AD",link:"#\u5B58\u5728\u5224\u65AD",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E",link:"#\u6A21\u7CCA\u67E5\u627E",children:[]}]},{level:2,title:"Member \u6269\u5C55",slug:"member-\u6269\u5C55",link:"#member-\u6269\u5C55",children:[{level:3,title:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",slug:"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",link:"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528",children:[]},{level:3,title:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",slug:"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",link:"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6",children:[]},{level:3,title:"\u5728\u7236\u7C7B\u67E5\u627E",slug:"\u5728\u7236\u7C7B\u67E5\u627E",link:"#\u5728\u7236\u7C7B\u67E5\u627E",children:[]},{level:3,title:"\u6A21\u7CCA\u67E5\u627E",slug:"\u6A21\u7CCA\u67E5\u627E-1",link:"#\u6A21\u7CCA\u67E5\u627E-1",children:[]},{level:3,title:"\u591A\u91CD\u67E5\u627E",slug:"\u591A\u91CD\u67E5\u627E-1",link:"#\u591A\u91CD\u67E5\u627E-1",children:[]},{level:3,title:"\u9759\u6001\u5B57\u8282\u7801",slug:"\u9759\u6001\u5B57\u8282\u7801",link:"#\u9759\u6001\u5B57\u8282\u7801",children:[]},{level:3,title:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",slug:"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",link:"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801",children:[]},{level:3,title:"\u76F4\u63A5\u8C03\u7528",slug:"\u76F4\u63A5\u8C03\u7528",link:"#\u76F4\u63A5\u8C03\u7528",children:[]},{level:3,title:"\u518D\u6B21\u67E5\u627E",slug:"\u518D\u6B21\u67E5\u627E",link:"#\u518D\u6B21\u67E5\u627E",children:[]},{level:3,title:"\u76F8\u5BF9\u5339\u914D",slug:"\u76F8\u5BF9\u5339\u914D",link:"#\u76F8\u5BF9\u5339\u914D",children:[]},{level:3,title:"\u8C03\u7528\u6CDB\u578B",slug:"\u8C03\u7528\u6CDB\u578B",link:"#\u8C03\u7528\u6CDB\u578B",children:[]},{level:3,title:"\u6CE8\u610F\u8BEF\u533A",slug:"\u6CE8\u610F\u8BEF\u533A",link:"#\u6CE8\u610F\u8BEF\u533A",children:[]}]},{level:2,title:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",slug:"\u5E38\u7528\u7C7B\u578B\u6269\u5C55",link:"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55",children:[]}],path:"/zh-cn/api/features.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u6587\u6863\u4ECB\u7ECD",headers:[{level:2,title:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",slug:"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",link:"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E",children:[]},{level:2,title:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",slug:"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",link:"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E",children:[]},{level:2,title:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",slug:"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",link:"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E",children:[]},{level:2,title:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",slug:"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",link:"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E",children:[]}],path:"/zh-cn/api/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u4ECB\u7ECD",headers:[{level:2,title:"\u80CC\u666F",slug:"\u80CC\u666F",link:"#\u80CC\u666F",children:[]},{level:2,title:"\u7528\u9014",slug:"\u7528\u9014",link:"#\u7528\u9014",children:[]},{level:2,title:"\u8BED\u8A00\u8981\u6C42",slug:"\u8BED\u8A00\u8981\u6C42",link:"#\u8BED\u8A00\u8981\u6C42",children:[]},{level:2,title:"\u7075\u611F\u6765\u6E90",slug:"\u7075\u611F\u6765\u6E90",link:"#\u7075\u611F\u6765\u6E90",children:[]}],path:"/zh-cn/guide/home.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"\u5FEB\u901F\u5F00\u59CB",headers:[{level:2,title:"\u73AF\u5883\u8981\u6C42",slug:"\u73AF\u5883\u8981\u6C42",link:"#\u73AF\u5883\u8981\u6C42",children:[]},{level:2,title:"\u9879\u76EE\u8981\u6C42",slug:"\u9879\u76EE\u8981\u6C42",link:"#\u9879\u76EE\u8981\u6C42",children:[{level:3,title:"\u96C6\u6210\u4F9D\u8D56",slug:"\u96C6\u6210\u4F9D\u8D56",link:"#\u96C6\u6210\u4F9D\u8D56",children:[]}]}],path:"/zh-cn/guide/quick-start.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u57FA\u672C\u914D\u7F6E",headers:[{level:2,title:"\u83B7\u53D6 API \u7248\u672C",slug:"\u83B7\u53D6-api-\u7248\u672C",link:"#\u83B7\u53D6-api-\u7248\u672C",children:[]},{level:2,title:"\u914D\u7F6E API \u76F8\u5173\u529F\u80FD",slug:"\u914D\u7F6E-api-\u76F8\u5173\u529F\u80FD",link:"#\u914D\u7F6E-api-\u76F8\u5173\u529F\u80FD",children:[{level:3,title:"\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E",slug:"\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E",link:"#\u81EA\u5B9A\u4E49\u8C03\u8BD5\u65E5\u5FD7\u6807\u7B7E",children:[]},{level:3,title:"\u542F\u7528\u6216\u7981\u7528 Debug \u6A21\u5F0F",slug:"\u542F\u7528\u6216\u7981\u7528-debug-\u6A21\u5F0F",link:"#\u542F\u7528\u6216\u7981\u7528-debug-\u6A21\u5F0F",children:[]},{level:3,title:"\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD",slug:"\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD",link:"#\u542F\u7528\u6216\u7981\u7528\u8C03\u8BD5\u65E5\u5FD7\u7684\u8F93\u51FA\u529F\u80FD",children:[]},{level:3,title:"\u4F7F\u7528 configs \u65B9\u6CD5\u914D\u7F6E",slug:"\u4F7F\u7528-configs-\u65B9\u6CD5\u914D\u7F6E",link:"#\u4F7F\u7528-configs-\u65B9\u6CD5\u914D\u7F6E",children:[]}]}],path:"/zh-cn/config/api-example.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"API \u5F02\u5E38\u5904\u7406",headers:[{level:2,title:"\u975E\u963B\u65AD\u5F02\u5E38",slug:"\u975E\u963B\u65AD\u5F02\u5E38",link:"#\u975E\u963B\u65AD\u5F02\u5E38",children:[]},{level:2,title:"\u963B\u65AD\u5F02\u5E38",slug:"\u963B\u65AD\u5F02\u5E38",link:"#\u963B\u65AD\u5F02\u5E38",children:[]}],path:"/zh-cn/config/api-exception.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"YukiReflection - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugTag - field",slug:"debugtag-field",link:"#debugtag-field",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isAllowPrintingLogs - field",slug:"isallowprintinglogs-field",link:"#isallowprintinglogs-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/YukiReflection.html",pathLocale:"/en/",extraFields:[]},{title:"YukiReflection - object",headers:[{level:2,title:"API_VERSION_NAME - field",slug:"api-version-name-field",link:"#api-version-name-field",children:[]},{level:2,title:"API_VERSION_CODE - field",slug:"api-version-code-field",link:"#api-version-code-field",children:[]},{level:2,title:"Configs - object",slug:"configs-object",link:"#configs-object",children:[{level:3,title:"debugTag - field",slug:"debugtag-field",link:"#debugtag-field",children:[]},{level:3,title:"isDebug - field",slug:"isdebug-field",link:"#isdebug-field",children:[]},{level:3,title:"isAllowPrintingLogs - field",slug:"isallowprintinglogs-field",link:"#isallowprintinglogs-field",children:[]}]},{level:2,title:"configs - method",slug:"configs-method",link:"#configs-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html",pathLocale:"/en/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html",pathLocale:"/en/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html",pathLocale:"/en/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html",pathLocale:"/en/",extraFields:[]},{title:"CurrentClass - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"generic - method",slug:"generic-method",link:"#generic-method",children:[]},{level:2,title:"generic - method",slug:"generic-method-1",link:"#generic-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"SuperClass - class",slug:"superclass-class",link:"#superclass-class",children:[{level:3,title:"name - field",slug:"name-field-1",link:"#name-field-1",children:[]},{level:3,title:"simpleName - field",slug:"simplename-field-1",link:"#simplename-field-1",children:[]},{level:3,title:"generic - method",slug:"generic-method-2",link:"#generic-method-2",children:[]},{level:3,title:"generic - method",slug:"generic-method-3",link:"#generic-method-3",children:[]},{level:3,title:"field - method",slug:"field-method-1",link:"#field-method-1",children:[]},{level:3,title:"method - method",slug:"method-method-1",link:"#method-method-1",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GenericClass - class",headers:[{level:2,title:"argument - method",slug:"argument-method",link:"#argument-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariousClass - class",headers:[{level:2,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:2,title:"getOrNull - method",slug:"getornull-method",link:"#getornull-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ReflectionFactory - kt",headers:[{level:2,title:"ClassLoader.listOfClasses - ext-method",slug:"classloader-listofclasses-ext-method",link:"#classloader-listofclasses-ext-method",children:[]},{level:2,title:"ClassLoader.searchClass - ext-method",slug:"classloader-searchclass-ext-method",link:"#classloader-searchclass-ext-method",children:[]},{level:2,title:"Class.hasExtends - ext-field",slug:"class-hasextends-ext-field",link:"#class-hasextends-ext-field",children:[]},{level:2,title:"Class?.extends - ext-method",slug:"class-extends-ext-method",link:"#class-extends-ext-method",children:[]},{level:2,title:"Class?.notExtends - ext-method",slug:"class-notextends-ext-method",link:"#class-notextends-ext-method",children:[]},{level:2,title:"Class?.implements - ext-method",slug:"class-implements-ext-method",link:"#class-implements-ext-method",children:[]},{level:2,title:"Class?.notImplements - ext-method",slug:"class-notimplements-ext-method",link:"#class-notimplements-ext-method",children:[]},{level:2,title:"Class.toJavaPrimitiveType - ext-method",slug:"class-tojavaprimitivetype-ext-method",link:"#class-tojavaprimitivetype-ext-method",children:[]},{level:2,title:"String.toClass - ext-method",slug:"string-toclass-ext-method",link:"#string-toclass-ext-method",children:[]},{level:2,title:"String.toClassOrNull - ext-method",slug:"string-toclassornull-ext-method",link:"#string-toclassornull-ext-method",children:[]},{level:2,title:"classOf - method",slug:"classof-method",link:"#classof-method",children:[]},{level:2,title:"String.hasClass - ext-method",slug:"string-hasclass-ext-method",link:"#string-hasclass-ext-method",children:[]},{level:2,title:"Class.hasField - ext-method",slug:"class-hasfield-ext-method",link:"#class-hasfield-ext-method",children:[]},{level:2,title:"Class.hasMethod - ext-method",slug:"class-hasmethod-ext-method",link:"#class-hasmethod-ext-method",children:[]},{level:2,title:"Class.hasConstructor - ext-method",slug:"class-hasconstructor-ext-method",link:"#class-hasconstructor-ext-method",children:[]},{level:2,title:"Member.hasModifiers - ext-method",slug:"member-hasmodifiers-ext-method",link:"#member-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.hasModifiers - ext-method",slug:"class-hasmodifiers-ext-method",link:"#class-hasmodifiers-ext-method",children:[]},{level:2,title:"Class.field - ext-method",slug:"class-field-ext-method",link:"#class-field-ext-method",children:[]},{level:2,title:"Class.method - ext-method",slug:"class-method-ext-method",link:"#class-method-ext-method",children:[]},{level:2,title:"Class.constructor - ext-method",slug:"class-constructor-ext-method",link:"#class-constructor-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method",link:"#class-generic-ext-method",children:[]},{level:2,title:"Class.generic - ext-method",slug:"class-generic-ext-method-1",link:"#class-generic-ext-method-1",children:[]},{level:2,title:"Any.current - ext-method",slug:"any-current-ext-method",link:"#any-current-ext-method",children:[]},{level:2,title:"Class.buildOf - ext-method",slug:"class-buildof-ext-method",link:"#class-buildof-ext-method",children:[]},{level:2,title:"Class.allMethods - ext-method",slug:"class-allmethods-ext-method",link:"#class-allmethods-ext-method",children:[]},{level:2,title:"Class.allConstructors - ext-method",slug:"class-allconstructors-ext-method",link:"#class-allconstructors-ext-method",children:[]},{level:2,title:"Class.allFields - ext-method",slug:"class-allfields-ext-method",link:"#class-allfields-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html",pathLocale:"/en/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html",pathLocale:"/en/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html",pathLocale:"/en/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html",pathLocale:"/en/",extraFields:[]},{title:"BaseFinder - class",headers:[{level:2,title:"BaseFinder.IndexTypeCondition - class",slug:"basefinder-indextypecondition-class",link:"#basefinder-indextypecondition-class",children:[{level:3,title:"index - method",slug:"index-method",link:"#index-method",children:[]},{level:3,title:"index - method",slug:"index-method-1",link:"#index-method-1",children:[]},{level:3,title:"IndexTypeConditionSort - class",slug:"indextypeconditionsort-class",link:"#indextypeconditionsort-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DexClassFinder - class",headers:[{level:2,title:"companion object - object",slug:"companion-object-object",link:"#companion-object-object",children:[{level:3,title:"clearCache - method",slug:"clearcache-method",link:"#clearcache-method",children:[]}]},{level:2,title:"fullName - field",slug:"fullname-field",link:"#fullname-field",children:[]},{level:2,title:"simpleName - field",slug:"simplename-field",link:"#simplename-field",children:[]},{level:2,title:"singleName - field",slug:"singlename-field",link:"#singlename-field",children:[]},{level:2,title:"from - method",slug:"from-method",link:"#from-method",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method",link:"#fullname-method",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method",link:"#simplename-method",children:[]},{level:2,title:"singleName - method",slug:"singlename-method",link:"#singlename-method",children:[]},{level:2,title:"fullName - method",slug:"fullname-method-1",link:"#fullname-method-1",children:[]},{level:2,title:"simpleName - method",slug:"simplename-method-1",link:"#simplename-method-1",children:[]},{level:2,title:"singleName - method",slug:"singlename-method-1",link:"#singlename-method-1",children:[]},{level:2,title:"extends - method",slug:"extends-method",link:"#extends-method",children:[]},{level:2,title:"extends - method",slug:"extends-method-1",link:"#extends-method-1",children:[]},{level:2,title:"implements - method",slug:"implements-method",link:"#implements-method",children:[]},{level:2,title:"implements - method",slug:"implements-method-1",link:"#implements-method-1",children:[]},{level:2,title:"anonymous - method",slug:"anonymous-method",link:"#anonymous-method",children:[]},{level:2,title:"noExtends - method",slug:"noextends-method",link:"#noextends-method",children:[]},{level:2,title:"noImplements - method",slug:"noimplements-method",link:"#noimplements-method",children:[]},{level:2,title:"noSuper - method",slug:"nosuper-method",link:"#nosuper-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method",link:"#enclosing-method",children:[]},{level:2,title:"enclosing - method",slug:"enclosing-method-1",link:"#enclosing-method-1",children:[]},{level:2,title:"FromPackageRules - class",slug:"frompackagerules-class",link:"#frompackagerules-class",children:[{level:3,title:"absolute - method",slug:"absolute-method",link:"#absolute-method",children:[]}]},{level:2,title:"ClassNameRules - class",slug:"classnamerules-class",link:"#classnamerules-class",children:[{level:3,title:"optional - method",slug:"optional-method",link:"#optional-method",children:[]}]},{level:2,title:"member - method",slug:"member-method",link:"#member-method",children:[]},{level:2,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:2,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:2,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:2,title:"Result - class",slug:"result-class",link:"#result-class",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"all - method",slug:"all-method-1",link:"#all-method-1",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"onNoClassDefFoundError - method",slug:"onnoclassdeffounderror-method",link:"#onnoclassdeffounderror-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorFinder - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"constructor - method",slug:"constructor-method",link:"#constructor-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchConstructor - method",slug:"onnosuchconstructor-method",link:"#onnosuchconstructor-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]},{level:2,title:"type - method",slug:"type-method-1",link:"#type-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"field - method",slug:"field-method",link:"#field-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchField - method",slug:"onnosuchfield-method",link:"#onnosuchfield-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodFinder - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"order - method",slug:"order-method",link:"#order-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"name - method",slug:"name-method-1",link:"#name-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-2",link:"#paramcount-method-2",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]},{level:2,title:"returnType - method",slug:"returntype-method-1",link:"#returntype-method-1",children:[]},{level:2,title:"superClass - method",slug:"superclass-method",link:"#superclass-method",children:[]},{level:2,title:"RemedyPlan - class",slug:"remedyplan-class",link:"#remedyplan-class",children:[{level:3,title:"method - method",slug:"method-method",link:"#method-method",children:[]},{level:3,title:"Result - class",slug:"result-class",link:"#result-class",children:[]}]},{level:2,title:"Result - class",slug:"result-class-1",link:"#result-class-1",children:[{level:3,title:"result - method",slug:"result-method",link:"#result-method",children:[]},{level:3,title:"get - method",slug:"get-method",link:"#get-method",children:[]},{level:3,title:"all - method",slug:"all-method",link:"#all-method",children:[]},{level:3,title:"give - method",slug:"give-method",link:"#give-method",children:[]},{level:3,title:"giveAll - method",slug:"giveall-method",link:"#giveall-method",children:[]},{level:3,title:"wait - method",slug:"wait-method",link:"#wait-method",children:[]},{level:3,title:"waitAll - method",slug:"waitall-method",link:"#waitall-method",children:[]},{level:3,title:"remedys - method",slug:"remedys-method",link:"#remedys-method",children:[]},{level:3,title:"onNoSuchMethod - method",slug:"onnosuchmethod-method",link:"#onnosuchmethod-method",children:[]},{level:3,title:"ignored - method",slug:"ignored-method",link:"#ignored-method",children:[]},{level:3,title:"Instance - class",slug:"instance-class",link:"#instance-class",children:[]},{level:3,title:"array - method",slug:"array-method",link:"#array-method",children:[]},{level:3,title:"list - method",slug:"list-method",link:"#list-method",children:[]}]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html",pathLocale:"/en/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html",pathLocale:"/en/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html",pathLocale:"/en/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html",pathLocale:"/en/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html",pathLocale:"/en/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html",pathLocale:"/en/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html",pathLocale:"/en/",extraFields:[]},{title:"CountRules - class",headers:[{level:2,title:"Int.isZero - i-ext-method",slug:"int-iszero-i-ext-method",link:"#int-iszero-i-ext-method",children:[]},{level:2,title:"Int.moreThan - i-ext-method",slug:"int-morethan-i-ext-method",link:"#int-morethan-i-ext-method",children:[]},{level:2,title:"Int.lessThan - i-ext-method",slug:"int-lessthan-i-ext-method",link:"#int-lessthan-i-ext-method",children:[]},{level:2,title:"Int.inInterval - i-ext-method",slug:"int-ininterval-i-ext-method",link:"#int-ininterval-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ModifierRules - class",headers:[{level:2,title:"isPublic - i-ext-field",slug:"ispublic-i-ext-field",link:"#ispublic-i-ext-field",children:[]},{level:2,title:"isPrivate - i-ext-field",slug:"isprivate-i-ext-field",link:"#isprivate-i-ext-field",children:[]},{level:2,title:"isProtected - i-ext-field",slug:"isprotected-i-ext-field",link:"#isprotected-i-ext-field",children:[]},{level:2,title:"isStatic - i-ext-field",slug:"isstatic-i-ext-field",link:"#isstatic-i-ext-field",children:[]},{level:2,title:"isFinal - i-ext-field",slug:"isfinal-i-ext-field",link:"#isfinal-i-ext-field",children:[]},{level:2,title:"isSynchronized - i-ext-field",slug:"issynchronized-i-ext-field",link:"#issynchronized-i-ext-field",children:[]},{level:2,title:"isVolatile - i-ext-field",slug:"isvolatile-i-ext-field",link:"#isvolatile-i-ext-field",children:[]},{level:2,title:"isTransient - i-ext-field",slug:"istransient-i-ext-field",link:"#istransient-i-ext-field",children:[]},{level:2,title:"isNative - i-ext-field",slug:"isnative-i-ext-field",link:"#isnative-i-ext-field",children:[]},{level:2,title:"isInterface - i-ext-field",slug:"isinterface-i-ext-field",link:"#isinterface-i-ext-field",children:[]},{level:2,title:"isAbstract - i-ext-field",slug:"isabstract-i-ext-field",link:"#isabstract-i-ext-field",children:[]},{level:2,title:"isStrict - i-ext-field",slug:"isstrict-i-ext-field",link:"#isstrict-i-ext-field",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"NameRules - class",headers:[{level:2,title:"String.isSynthetic - i-ext-method",slug:"string-issynthetic-i-ext-method",link:"#string-issynthetic-i-ext-method",children:[]},{level:2,title:"String.isOnlySymbols - i-ext-method",slug:"string-isonlysymbols-i-ext-method",link:"#string-isonlysymbols-i-ext-method",children:[]},{level:2,title:"String.isOnlyLetters - i-ext-method",slug:"string-isonlyletters-i-ext-method",link:"#string-isonlyletters-i-ext-method",children:[]},{level:2,title:"String.isOnlyNumbers - i-ext-method",slug:"string-isonlynumbers-i-ext-method",link:"#string-isonlynumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLettersNumbers - i-ext-method",slug:"string-isonlylettersnumbers-i-ext-method",link:"#string-isonlylettersnumbers-i-ext-method",children:[]},{level:2,title:"String.isOnlyLowercase - i-ext-method",slug:"string-isonlylowercase-i-ext-method",link:"#string-isonlylowercase-i-ext-method",children:[]},{level:2,title:"String.isOnlyUppercase - i-ext-method",slug:"string-isonlyuppercase-i-ext-method",link:"#string-isonlyuppercase-i-ext-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ObjectRules - class",headers:[],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"ConstructorRules - class",headers:[{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"FieldRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"type - field",slug:"type-field",link:"#type-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"type - method",slug:"type-method",link:"#type-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MemberRules - class",headers:[{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"MethodRules - class",headers:[{level:2,title:"name - field",slug:"name-field",link:"#name-field",children:[]},{level:2,title:"paramCount - field",slug:"paramcount-field",link:"#paramcount-field",children:[]},{level:2,title:"returnType - field",slug:"returntype-field",link:"#returntype-field",children:[]},{level:2,title:"modifiers - method",slug:"modifiers-method",link:"#modifiers-method",children:[]},{level:2,title:"emptyParam - method",slug:"emptyparam-method",link:"#emptyparam-method",children:[]},{level:2,title:"param - method",slug:"param-method",link:"#param-method",children:[]},{level:2,title:"param - method",slug:"param-method-1",link:"#param-method-1",children:[]},{level:2,title:"name - method",slug:"name-method",link:"#name-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method",link:"#paramcount-method",children:[]},{level:2,title:"paramCount - method",slug:"paramcount-method-1",link:"#paramcount-method-1",children:[]},{level:2,title:"returnType - method",slug:"returntype-method",link:"#returntype-method",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"DefinedTypeFactory - kt",headers:[{level:2,title:"VagueType - field",slug:"vaguetype-field",link:"#vaguetype-field",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ComponentTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"GraphicsTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"ViewTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"VariableTypeFactory - kt",headers:[],path:"/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/en/",extraFields:[]},{title:"MemberRulesResult - class",headers:[{level:2,title:"none - method",slug:"none-method",link:"#none-method",children:[]},{level:2,title:"count - method",slug:"count-method",link:"#count-method",children:[]},{level:2,title:"count - method",slug:"count-method-1",link:"#count-method-1",children:[]},{level:2,title:"count - method",slug:"count-method-2",link:"#count-method-2",children:[]}],path:"/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html",pathLocale:"/zh-cn/",extraFields:[]},{title:"",headers:[],path:"/404.html",pathLocale:"/",extraFields:[]}],Us=ke(up),dp=()=>Us;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSearchIndex=e=>{Us.value=e});const hp=({searchIndex:e,routeLocale:t,query:l,maxSuggestions:n})=>{const i=B(()=>e.value.filter(o=>o.pathLocale===t.value));return B(()=>{const o=l.value.trim().toLowerCase();if(!o)return[];const r=[],s=(a,c)=>{ar(o,[c.title])&&r.push({link:`${a.path}#${c.slug}`,title:a.title,header:c.title});for(const u of c.children){if(r.length>=n.value)return;s(a,u)}};for(const a of i.value){if(r.length>=n.value)break;if(ar(o,[a.title,...a.extraFields])){r.push({link:a.path,title:a.title});continue}for(const c of a.headers){if(r.length>=n.value)break;s(a,c)}}return r})},fp=e=>{const t=ke(0);return{focusIndex:t,focusNext:()=>{t.value{t.value>0?t.value-=1:t.value=e.value.length-1}}},mp=he({name:"SearchBox",props:{locales:{type:Object,required:!1,default:()=>({})},hotKeys:{type:Array,required:!1,default:()=>[]},maxSuggestions:{type:Number,required:!1,default:5}},setup(e){const{locales:t,hotKeys:l,maxSuggestions:n}=Cn(e),i=Xt(),o=Kl(),r=dp(),s=ke(null),a=ke(!1),c=ke(""),u=B(()=>{var w;return(w=t.value[o.value])!=null?w:{}}),h=hp({searchIndex:r,routeLocale:o,query:c,maxSuggestions:n}),{focusIndex:f,focusNext:p,focusPrev:k}=fp(h);cp({input:s,hotKeys:l});const R=B(()=>a.value&&!!h.value.length),x=()=>{!R.value||k()},g=()=>{!R.value||p()},b=w=>{if(!R.value)return;const D=h.value[w];!D||i.push(D.link).then(()=>{c.value="",f.value=0})};return()=>ue("form",{class:"search-box",role:"search"},[ue("input",{ref:s,type:"search",placeholder:u.value.placeholder,autocomplete:"off",spellcheck:!1,value:c.value,onFocus:()=>a.value=!0,onBlur:()=>a.value=!1,onInput:w=>c.value=w.target.value,onKeydown:w=>{switch(w.key){case"ArrowUp":{x();break}case"ArrowDown":{g();break}case"Enter":{w.preventDefault(),b(f.value);break}}}}),R.value&&ue("ul",{class:"suggestions",onMouseleave:()=>f.value=-1},h.value.map(({link:w,title:D,header:q},ee)=>ue("li",{class:["suggestion",{focus:f.value===ee}],onMouseenter:()=>f.value=ee,onMousedown:()=>b(ee)},ue("a",{href:w,onClick:O=>O.preventDefault()},[ue("span",{class:"page-title"},D),q&&ue("span",{class:"page-header"},`> ${q}`)]))))])}});const pp={"/en/":{placeholder:"Search"},"/zh-cn/":{placeholder:"\u641C\u7D22"}},gp=["s","/"],vp=5,bp=Mt({enhance({app:e}){e.component("SearchBox",t=>ue(mp,{locales:pp,hotKeys:gp,maxSuggestions:vp,...t}))}}),on=[Vd,Bd,Wd,oh,ch,mh,op,bp];var qs=ke(ea),Ks=Ci({key:"",path:"",title:"",lang:"",frontmatter:{},excerpt:"",headers:[]}),gt=ke(Ks),It=()=>gt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updatePageData=e=>{qs.value[e.key]=()=>Promise.resolve(e),e.key===gt.value.key&&(gt.value=e)});var Ws=Symbol(""),bt=()=>{const e=De(Ws);if(!e)throw new Error("usePageFrontmatter() is called without provider.");return e},Gs=Symbol(""),_p=()=>{const e=De(Gs);if(!e)throw new Error("usePageHead() is called without provider.");return e},yp=Symbol(""),Ys=Symbol(""),kp=()=>{const e=De(Ys);if(!e)throw new Error("usePageLang() is called without provider.");return e},Vi=Symbol(""),Kl=()=>{const e=De(Vi);if(!e)throw new Error("useRouteLocale() is called without provider.");return e},Pt=ke(Lu),Qs=()=>Pt;import.meta.webpackHot&&(__VUE_HMR_RUNTIME__.updateSiteData=e=>{Pt.value=e});var Js=Symbol(""),Hi=()=>{const e=De(Js);if(!e)throw new Error("useSiteLocaleData() is called without provider.");return e},xp=Symbol(""),qt=gl({resolvePageData:async e=>{const t=qs.value[e],l=await(t==null?void 0:t());return l!=null?l:Ks},resolvePageFrontmatter:e=>e.frontmatter,resolvePageHead:(e,t,l)=>{const n=_e(t.description)?t.description:l.description,i=[...te(t.head)?t.head:[],...l.head,["title",{},e],["meta",{name:"description",content:n}]];return Ou(i)},resolvePageHeadTitle:(e,t)=>`${e.title?`${e.title} | `:""}${t.title}`,resolvePageLang:e=>e.lang||"en",resolveRouteLocale:(e,t)=>fs(e,t),resolveSiteLocaleData:(e,t)=>({...e,...e.locales[t]})}),ji=he({name:"ClientOnly",setup(e,t){const l=ke(!1);return Ze(()=>{l.value=!0}),()=>{var n,i;return l.value?(i=(n=t.slots).default)==null?void 0:i.call(n):null}}}),Ep=he({name:"Content",props:{pageKey:{type:String,required:!1,default:""}},setup(e){const t=It(),l=B(()=>ms[e.pageKey||t.value.key]);return()=>l.value?ue(l.value):ue("div","404 Not Found")}}),Cp="Layout",Rp="NotFound",wp=on.reduce((e,t)=>({...e,...t.layouts}),{}),cr=he({name:"Vuepress",setup(){const e=It(),t=B(()=>{let l;if(e.value.path){const n=e.value.frontmatter.layout;_e(n)?l=n:l=Cp}else l=Rp;return wp[l]});return()=>ue(t.value)}}),Bi=e=>ql(e)?e:`${Qs().value.base}${hs(e)}`;const Tp=[["v-8daa1a0e","/",{title:""},["/index.html","/index.md"]],["v-2d0a870d","/en/",{title:"Home"},["/en/index.html","/en/index.md"]],["v-c0c85b84","/zh-cn/",{title:"\u9996\u9875"},["/zh-cn/index.html","/zh-cn/index.md"]],["v-7a15fe3b","/en/about/about.html",{title:"About this Document"},["/en/about/about","/en/about/about.md"]],["v-3f851d14","/en/about/changelog.html",{title:"Changelog"},["/en/about/changelog","/en/about/changelog.md"]],["v-193cf592","/en/about/contacts.html",{title:"Contact Us"},["/en/about/contacts","/en/about/contacts.md"]],["v-ae7b83f2","/en/about/future.html",{title:"Looking for Future"},["/en/about/future","/en/about/future.md"]],["v-c557cfcc","/en/api/features.html",{title:"Features"},["/en/api/features","/en/api/features.md"]],["v-64fc7bb8","/en/api/home.html",{title:"Document Introduce"},["/en/api/home","/en/api/home.md"]],["v-9cfea7fc","/en/config/api-example.html",{title:"API Basic Configs"},["/en/config/api-example","/en/config/api-example.md"]],["v-72c12b7d","/en/config/api-exception.html",{title:"API Exception Handling"},["/en/config/api-exception","/en/config/api-exception.md"]],["v-efb45d4c","/en/guide/home.html",{title:"Introduce"},["/en/guide/home","/en/guide/home.md"]],["v-72889797","/en/guide/quick-start.html",{title:"Quick Start"},["/en/guide/quick-start","/en/guide/quick-start.md"]],["v-41967128","/zh-cn/about/about.html",{title:"\u5173\u4E8E\u6B64\u6587\u6863"},["/zh-cn/about/about","/zh-cn/about/about.md"]],["v-0e6c3476","/zh-cn/about/changelog.html",{title:"\u66F4\u65B0\u65E5\u5FD7"},["/zh-cn/about/changelog","/zh-cn/about/changelog.md"]],["v-6cf86266","/zh-cn/about/contacts.html",{title:"\u8054\u7CFB\u6211\u4EEC"},["/zh-cn/about/contacts","/zh-cn/about/contacts.md"]],["v-3106ca14","/zh-cn/about/future.html",{title:"\u5C55\u671B\u672A\u6765"},["/zh-cn/about/future","/zh-cn/about/future.md"]],["v-47e315ee","/zh-cn/api/features.html",{title:"\u529F\u80FD\u4ECB\u7ECD"},["/zh-cn/api/features","/zh-cn/api/features.md"]],["v-c8deafb2","/zh-cn/api/home.html",{title:"\u6587\u6863\u4ECB\u7ECD"},["/zh-cn/api/home","/zh-cn/api/home.md"]],["v-6a609e09","/zh-cn/guide/home.html",{title:"\u4ECB\u7ECD"},["/zh-cn/guide/home","/zh-cn/guide/home.md"]],["v-24840ff0","/zh-cn/guide/quick-start.html",{title:"\u5FEB\u901F\u5F00\u59CB"},["/zh-cn/guide/quick-start","/zh-cn/guide/quick-start.md"]],["v-c6114c9e","/zh-cn/config/api-example.html",{title:"API \u57FA\u672C\u914D\u7F6E"},["/zh-cn/config/api-example","/zh-cn/config/api-example.md"]],["v-5b43296c","/zh-cn/config/api-exception.html",{title:"API \u5F02\u5E38\u5904\u7406"},["/zh-cn/config/api-exception","/zh-cn/config/api-exception.md"]],["v-23f4d2be","/en/api/public/com/highcapable/yukireflection/YukiReflection.html",{title:"YukiReflection - object"},["/en/api/public/com/highcapable/yukireflection/YukiReflection","/en/api/public/com/highcapable/yukireflection/YukiReflection.md"]],["v-c088ede0","/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html",{title:"YukiReflection - object"},["/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection","/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.md"]],["v-47f17664","/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html",{title:"CurrentClass - class"},["/en/api/public/com/highcapable/yukireflection/bean/CurrentClass","/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.md"]],["v-38df33ac","/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html",{title:"GenericClass - class"},["/en/api/public/com/highcapable/yukireflection/bean/GenericClass","/en/api/public/com/highcapable/yukireflection/bean/GenericClass.md"]],["v-3a8666c0","/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html",{title:"VariousClass - class"},["/en/api/public/com/highcapable/yukireflection/bean/VariousClass","/en/api/public/com/highcapable/yukireflection/bean/VariousClass.md"]],["v-728f231c","/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory","/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md"]],["v-406687ff","/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html",{title:"CurrentClass - class"},["/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass","/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.md"]],["v-c5831246","/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html",{title:"GenericClass - class"},["/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass","/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.md"]],["v-c234ac1e","/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html",{title:"VariousClass - class"},["/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass","/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.md"]],["v-b3841eba","/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html",{title:"ReflectionFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory","/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.md"]],["v-740d06da","/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder","/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md"]],["v-6d6cd473","/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder","/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md"]],["v-b3220076","/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder","/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md"]],["v-4b907076","/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder","/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md"]],["v-012ee5a6","/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder","/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md"]],["v-c945cb6e","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html",{title:"BaseFinder - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.md"]],["v-2d13d624","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html",{title:"DexClassFinder - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.md"]],["v-722cd474","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html",{title:"ConstructorFinder - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.md"]],["v-293ae898","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html",{title:"FieldFinder - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.md"]],["v-155c9f97","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html",{title:"MethodFinder - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder","/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.md"]],["v-6c58c435","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md"]],["v-25cdee85","/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md"]],["v-12826b1f","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md"]],["v-597ac69b","/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md"]],["v-5ad1133e","/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory","/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md"]],["v-6f96d791","/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md"]],["v-56071599","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md"]],["v-4ea9e766","/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md"]],["v-3045c7fe","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules","/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md"]],["v-cce2b7b6","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md"]],["v-82a85036","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md"]],["v-71ecb893","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md"]],["v-5e7e121a","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md"]],["v-3dbf4880","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html",{title:"CountRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.md"]],["v-701721ec","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html",{title:"ModifierRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.md"]],["v-264e7384","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html",{title:"NameRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.md"]],["v-b0f7c49c","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html",{title:"ObjectRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.md"]],["v-ec153654","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html",{title:"ConstructorRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.md"]],["v-30993156","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html",{title:"FieldRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.md"]],["v-3daa8d42","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html",{title:"MemberRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.md"]],["v-2a3be6c9","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html",{title:"MethodRules - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.md"]],["v-30e525ac","/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html",{title:"DefinedTypeFactory - kt"},["/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory","/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.md"]],["v-7f47f9f8","/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html",{title:"ComponentTypeFactory - kt"},["/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory","/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.md"]],["v-5a1019d6","/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html",{title:"GraphicsTypeFactory - kt"},["/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory","/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.md"]],["v-be0e3220","/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html",{title:"ViewTypeFactory - kt"},["/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory","/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.md"]],["v-12f074b0","/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html",{title:"VariableTypeFactory - kt"},["/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory","/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.md"]],["v-4f47dfda","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult","/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md"]],["v-503f5f8b","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html",{title:"MemberRulesResult - class"},["/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult","/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.md"]],["v-3706649a","/404.html",{title:""},["/404"]]];var Lp=()=>Tp.reduce((e,[t,l,n,i])=>(e.push({name:t,path:l,component:cr,meta:n},...i.map(o=>({path:o,redirect:l}))),e),[{name:"404",path:"/:catchAll(.*)",component:cr}]),Pp=Qu,Op=()=>{const e=Fd({history:Pp(ds(Pt.value.base)),routes:Lp(),scrollBehavior:(t,l,n)=>n||(t.hash?{el:t.hash}:{top:0})});return e.beforeResolve(async(t,l)=>{var n;(t.path!==l.path||l===mt)&&([gt.value]=await Promise.all([qt.resolvePageData(t.name),(n=ms[t.name])==null?void 0:n.__asyncLoader()]))}),e},Ap=e=>{e.component("ClientOnly",ji),e.component("Content",Ep)},Ip=(e,t)=>{const l=B(()=>qt.resolveRouteLocale(Pt.value.locales,t.currentRoute.value.path)),n=B(()=>qt.resolveSiteLocaleData(Pt.value,l.value)),i=B(()=>qt.resolvePageFrontmatter(gt.value)),o=B(()=>qt.resolvePageHeadTitle(gt.value,n.value)),r=B(()=>qt.resolvePageHead(o.value,i.value,n.value)),s=B(()=>qt.resolvePageLang(gt.value));return e.provide(Vi,l),e.provide(Js,n),e.provide(Ws,i),e.provide(yp,o),e.provide(Gs,r),e.provide(Ys,s),Object.defineProperties(e.config.globalProperties,{$frontmatter:{get:()=>i.value},$head:{get:()=>r.value},$headTitle:{get:()=>o.value},$lang:{get:()=>s.value},$page:{get:()=>gt.value},$routeLocale:{get:()=>l.value},$site:{get:()=>Pt.value},$siteLocale:{get:()=>n.value},$withBase:{get:()=>Bi}}),{pageData:gt,pageFrontmatter:i,pageHead:r,pageHeadTitle:o,pageLang:s,routeLocale:l,siteData:Pt,siteLocaleData:n}},Fp=()=>{const e=Nt(),t=_p(),l=kp(),n=ke([]),i=()=>{t.value.forEach(r=>{const s=Sp(r);s&&n.value.push(s)})},o=()=>{document.documentElement.lang=l.value,n.value.forEach(r=>{r.parentNode===document.head&&document.head.removeChild(r)}),n.value.splice(0,n.value.length),t.value.forEach(r=>{const s=zp(r);s!==null&&(document.head.appendChild(s),n.value.push(s))})};Qt(xp,o),Ze(()=>{i(),o(),dt(()=>e.path,()=>o())})},Sp=([e,t,l=""])=>{const n=Object.entries(t).map(([s,a])=>_e(a)?`[${s}="${a}"]`:a===!0?`[${s}]`:"").join(""),i=`head > ${e}${n}`;return Array.from(document.querySelectorAll(i)).find(s=>s.innerText===l)||null},zp=([e,t,l])=>{if(!_e(e))return null;const n=document.createElement(e);return Ii(t)&&Object.entries(t).forEach(([i,o])=>{_e(o)?n.setAttribute(i,o):o===!0&&n.setAttribute(i,"")}),_e(l)&&n.appendChild(document.createTextNode(l)),n},Dp=wu,Mp=async()=>{var l;const e=Dp({name:"VuepressApp",setup(){var n;Fp();for(const i of on)(n=i.setup)==null||n.call(i);return()=>[ue(ws),...on.flatMap(({rootComponents:i=[]})=>i.map(o=>ue(o)))]}}),t=Op();Ap(e),Ip(e,t);for(const n of on)await((l=n.enhance)==null?void 0:l.call(n,{app:e,router:t,siteData:Pt}));return e.use(t),{app:e,router:t}};Mp().then(({app:e,router:t})=>{t.isReady().then(()=>{e.mount("#app")})});export{Le as _,Hc as a,pe as b,X as c,Mp as createVueApp,ie as d,Dt as e,V as o,yt as r,Me as w}; diff --git a/docs/assets/back-to-top.8efcbe56.svg b/docs/assets/back-to-top.8efcbe56.svg deleted file mode 100644 index 8323678..0000000 --- a/docs/assets/back-to-top.8efcbe56.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/assets/changelog.html.01288623.js b/docs/assets/changelog.html.01288623.js deleted file mode 100644 index 9ff16de..0000000 --- a/docs/assets/changelog.html.01288623.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3f851d14","path":"/en/about/changelog.html","title":"Changelog","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.0.2 | 2023.04.25","slug":"_1-0-2-2023-04-25","link":"#_1-0-2-2023-04-25","children":[]},{"level":3,"title":"1.0.1 | 2023.04.16","slug":"_1-0-1-2023-04-16","link":"#_1-0-1-2023-04-16","children":[]},{"level":3,"title":"1.0.0 | 2023.01.26","slug":"_1-0-0-2023-01-26","link":"#_1-0-0-2023-01-26","children":[]}],"git":{"updatedTime":1682372495000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/about/changelog.md"}');export{e as data}; diff --git a/docs/assets/changelog.html.36e96eae.js b/docs/assets/changelog.html.36e96eae.js deleted file mode 100644 index 4f89a73..0000000 --- a/docs/assets/changelog.html.36e96eae.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as a,r as c,o as l,c as d,b as e,d as o,e as t,a as i}from"./app.2add9aa5.js";const r={},_=e("h1",{id:"\u66F4\u65B0\u65E5\u5FD7",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u66F4\u65B0\u65E5\u5FD7","aria-hidden":"true"},"#"),t(" \u66F4\u65B0\u65E5\u5FD7")],-1),h=e("blockquote",null,[e("p",null,[t("\u8FD9\u91CC\u8BB0\u5F55\u4E86 "),e("code",null,"YukiReflection"),t(" \u7684\u7248\u672C\u66F4\u65B0\u5386\u53F2\u3002")])],-1),u=e("div",{class:"custom-container danger"},[e("p",{class:"custom-container-title"},"\u7279\u522B\u6CE8\u610F"),e("p",null,"\u6211\u4EEC\u53EA\u4F1A\u5BF9\u6700\u65B0\u7684 API \u7248\u672C\u8FDB\u884C\u7EF4\u62A4\uFF0C\u82E5\u4F60\u6B63\u5728\u4F7F\u7528\u8FC7\u65F6\u7684 API \u7248\u672C\u5219\u4EE3\u8868\u4F60\u81EA\u613F\u653E\u5F03\u4E00\u5207\u7EF4\u62A4\u7684\u53EF\u80FD\u6027\u3002")],-1),m={id:"_1-0-2-2023-04-25",tabindex:"-1"},p=e("a",{class:"header-anchor",href:"#_1-0-2-2023-04-25","aria-hidden":"true"},"#",-1),f=t(" 1.0.2 | 2023.04.25 \u2002"),b=t("\u4FEE\u590D\u4E00\u4E2A\u4E25\u91CD\u95EE\u9898\uFF0C"),g=e("code",null,"Member",-1),x=t(" \u7F13\u5B58\u672A\u751F\u6548\u4E14\u6301\u7EED\u5B58\u50A8\u6700\u7EC8\u5F15\u53D1 APP \u5185\u5B58\u6EA2\u51FA (OOM)\uFF0C\u611F\u8C22 "),v={href:"https://github.com/Art-Chen",target:"_blank",rel:"noopener noreferrer"},k=t("Art-Chen"),A=i("
  • \u79FB\u9664 Member \u7684\u76F4\u63A5\u7F13\u5B58\u529F\u80FD\u5E76\u4F5C\u5E9F YukiReflection.Configs.isEnableMemberCache\uFF0C\u4FDD\u7559 Class \u7684\u7F13\u5B58\u529F\u80FD
  • \u5BF9\u63A5\u67E5\u627E\u529F\u80FD\u5230 Sequence\uFF0C\u4F18\u5316 Member \u7684\u67E5\u627E\u901F\u5EA6\u4E0E\u6027\u80FD
  • ",2),C={id:"_1-0-1-2023-04-16",tabindex:"-1"},y=e("a",{class:"header-anchor",href:"#_1-0-1-2023-04-16","aria-hidden":"true"},"#",-1),M=t(" 1.0.1 | 2023.04.16 \u2002"),B=e("ul",null,[e("li",null,[t("\u5C06\u4F9D\u8D56\u5E93\u7684\u7C7B\u578B\u7531 "),e("strong",null,"Java Library"),t(" (jar) \u4FEE\u6539\u4E3A "),e("strong",null,"Android Library"),t(" (aar)")]),e("li",null,[t("\u79FB\u9664\u4E86 Android "),e("code",null,"type"),t(" \u4E2D\u7684\u9519\u8BEF "),e("code",null,"Class"),t(" \u5BF9\u8C61\u58F0\u660E")])],-1),E={id:"_1-0-0-2023-01-26",tabindex:"-1"},I=e("a",{class:"header-anchor",href:"#_1-0-0-2023-01-26","aria-hidden":"true"},"#",-1),L=t(" 1.0.0 | 2023.01.26 \u2002"),N=e("ul",null,[e("li",null,"\u9996\u4E2A\u7248\u672C\u63D0\u4EA4\u81F3 Maven")],-1);function P(V,q){const n=c("Badge"),s=c("ExternalLinkIcon");return l(),d("div",null,[_,h,u,e("h3",m,[p,f,o(n,{type:"tip",text:"\u6700\u65B0",vertical:"middle"})]),e("ul",null,[e("li",null,[b,g,x,e("a",v,[k,o(s)])]),A]),e("h3",C,[y,M,o(n,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),B,e("h3",E,[I,L,o(n,{type:"warning",text:"\u8FC7\u65E7",vertical:"middle"})]),N])}const O=a(r,[["render",P],["__file","changelog.html.vue"]]);export{O as default}; diff --git a/docs/assets/changelog.html.a0481c52.js b/docs/assets/changelog.html.a0481c52.js deleted file mode 100644 index f650999..0000000 --- a/docs/assets/changelog.html.a0481c52.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as a,o as r,c as l,b as e,d as n,a as c,e as t}from"./app.2add9aa5.js";const d={},h=c('

    Changelog

    The version update history of YukiReflection is recorded here.

    Pay Attention

    We will only maintain the latest API version, if you are using an outdate API version, you voluntarily renounce any possibility of maintenance.

    Notice

    To avoid translation time consumption, Changelog will use Google Translation from Chinese to English, please refer to the original text for actual reference.

    Time zone of version release date: UTC+8

    ',4),_={id:"_1-0-2-2023-04-25",tabindex:"-1"},u=e("a",{class:"header-anchor",href:"#_1-0-2-2023-04-25","aria-hidden":"true"},"#",-1),p=t(" 1.0.2 | 2023.04.25 \u2002"),f=t("Fixed a critical issue where the "),g=e("code",null,"Member",-1),m=t(" cache did not take effect and persistent storage eventually caused app out of memory (OOM), thanks to "),v={href:"https://github.com/Art-Chen",target:"_blank",rel:"noopener noreferrer"},b=t("Art-Chen"),y=e("li",null,[t("Remove the direct cache function of "),e("code",null,"Member"),t(" and deprecated "),e("s",null,[e("code",null,"YukiReflection.Configs.isEnableMemberCache")]),t(", keep the cache function of "),e("code",null,"Class")],-1),x=e("li",null,[t("Modified finder to "),e("code",null,"Sequence"),t(", optimize the finding speed and performance of "),e("code",null,"Member")],-1),k={id:"_1-0-1-2023-04-16",tabindex:"-1"},C=e("a",{class:"header-anchor",href:"#_1-0-1-2023-04-16","aria-hidden":"true"},"#",-1),w=t(" 1.0.1 | 2023.04.16 \u2002"),A=e("ul",null,[e("li",null,[t("Change the type of dependent library from "),e("strong",null,"Java Library"),t(" (jar) to "),e("strong",null,"Android Library"),t(" (aar)")]),e("li",null,[t("Removed wrong "),e("code",null,"Class"),t(" object declaration in Android "),e("code",null,"type")])],-1),M={id:"_1-0-0-2023-01-26",tabindex:"-1"},T=e("a",{class:"header-anchor",href:"#_1-0-0-2023-01-26","aria-hidden":"true"},"#",-1),B=t(" 1.0.0 | 2023.01.26 \u2002"),E=e("ul",null,[e("li",null,"The first version is submitted to Maven")],-1);function N(I,L){const o=a("Badge"),i=a("ExternalLinkIcon");return r(),l("div",null,[h,e("h3",_,[u,p,n(o,{type:"tip",text:"latest",vertical:"middle"})]),e("ul",null,[e("li",null,[f,g,m,e("a",v,[b,n(i)])]),y,x]),e("h3",k,[C,w,n(o,{type:"warning",text:"stale",vertical:"middle"})]),A,e("h3",M,[T,B,n(o,{type:"warning",text:"stale",vertical:"middle"})]),E])}const V=s(d,[["render",N],["__file","changelog.html.vue"]]);export{V as default}; diff --git a/docs/assets/changelog.html.eb0b25c0.js b/docs/assets/changelog.html.eb0b25c0.js deleted file mode 100644 index 88ec48a..0000000 --- a/docs/assets/changelog.html.eb0b25c0.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-0e6c3476","path":"/zh-cn/about/changelog.html","title":"\u66F4\u65B0\u65E5\u5FD7","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":3,"title":"1.0.2 | 2023.04.25","slug":"_1-0-2-2023-04-25","link":"#_1-0-2-2023-04-25","children":[]},{"level":3,"title":"1.0.1 | 2023.04.16","slug":"_1-0-1-2023-04-16","link":"#_1-0-1-2023-04-16","children":[]},{"level":3,"title":"1.0.0 | 2023.01.26","slug":"_1-0-0-2023-01-26","link":"#_1-0-0-2023-01-26","children":[]}],"git":{"updatedTime":1682372495000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/about/changelog.md"}');export{e as data}; diff --git a/docs/assets/contacts.html.1da5e82b.js b/docs/assets/contacts.html.1da5e82b.js deleted file mode 100644 index 63ea160..0000000 --- a/docs/assets/contacts.html.1da5e82b.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r,o as _,c,b as e,d as n,e as t}from"./app.2add9aa5.js";const a={},l=e("h1",{id:"\u8054\u7CFB\u6211\u4EEC",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u8054\u7CFB\u6211\u4EEC","aria-hidden":"true"},"#"),t(" \u8054\u7CFB\u6211\u4EEC")],-1),i=e("blockquote",null,[e("p",null,"\u5982\u5728\u4F7F\u7528\u4E2D\u6709\u4EFB\u4F55\u95EE\u9898\uFF0C\u6216\u6709\u4EFB\u4F55\u5EFA\u8BBE\u6027\u7684\u5EFA\u8BAE\uFF0C\u90FD\u53EF\u4EE5\u8054\u7CFB\u6211\u4EEC\u3002")],-1),h=t("\u52A0\u5165\u6211\u4EEC "),d={href:"https://t.me/YukiReflection",target:"_blank",rel:"noopener noreferrer"},u=t("\u70B9\u51FB\u52A0\u5165 Telegram \u7FA4\u7EC4"),p=t("\u3001"),f={href:"https://t.me/HighCapable_Dev",target:"_blank",rel:"noopener noreferrer"},m=t("\u70B9\u51FB\u52A0\u5165 Telegram \u7FA4\u7EC4 (\u5F00\u53D1\u8005)"),k=t("\u3002"),b=t("\u5728 "),x=e("strong",null,"\u9177\u5B89",-1),g=t(" \u627E\u5230\u6211 "),v={href:"http://www.coolapk.com/u/876977",target:"_blank",rel:"noopener noreferrer"},w=t("@\u661F\u591C\u4E0D\u835F"),B=t("\u3002"),E=e("h2",{id:"\u52A9\u529B\u7EF4\u62A4",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u52A9\u529B\u7EF4\u62A4","aria-hidden":"true"},"#"),t(" \u52A9\u529B\u7EF4\u62A4")],-1),N=e("p",null,[t("\u611F\u8C22\u60A8\u9009\u62E9\u5E76\u4F7F\u7528 "),e("code",null,"YukiReflection"),t("\uFF0C\u5982\u6709\u4EE3\u7801\u76F8\u5173\u7684\u5EFA\u8BAE\u548C\u8BF7\u6C42\uFF0C\u53EF\u5728 GitHub \u63D0\u4EA4 Pull Request\u3002")],-1);function R(T,V){const o=r("ExternalLinkIcon");return _(),c("div",null,[l,i,e("p",null,[h,e("a",d,[u,n(o)]),p,e("a",f,[m,n(o)]),k]),e("p",null,[b,x,g,e("a",v,[w,n(o)]),B]),E,N])}const C=s(a,[["render",R],["__file","contacts.html.vue"]]);export{C as default}; diff --git a/docs/assets/contacts.html.3310a645.js b/docs/assets/contacts.html.3310a645.js deleted file mode 100644 index 67baa58..0000000 --- a/docs/assets/contacts.html.3310a645.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-6cf86266","path":"/zh-cn/about/contacts.html","title":"\u8054\u7CFB\u6211\u4EEC","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u52A9\u529B\u7EF4\u62A4","slug":"\u52A9\u529B\u7EF4\u62A4","link":"#\u52A9\u529B\u7EF4\u62A4","children":[]}],"git":{"updatedTime":1695391325000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/about/contacts.md"}');export{t as data}; diff --git a/docs/assets/contacts.html.9abe8991.js b/docs/assets/contacts.html.9abe8991.js deleted file mode 100644 index 9a7a899..0000000 --- a/docs/assets/contacts.html.9abe8991.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,r as a,o as c,c as r,b as e,d as n,e as t}from"./app.2add9aa5.js";const i={},_=e("h1",{id:"contact-us",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#contact-us","aria-hidden":"true"},"#"),t(" Contact Us")],-1),l=e("blockquote",null,[e("p",null,"If you have any questions in use, or have any constructive suggestions, you can contact us.")],-1),h=t("Join us "),d={href:"https://t.me/YukiReflection",target:"_blank",rel:"noopener noreferrer"},u=t("Click to join Telegram group"),p=t(", "),f={href:"https://t.me/HighCapable_Dev",target:"_blank",rel:"noopener noreferrer"},m=t("Click to join Telegram group (Developer)"),g=t("."),k=t("Find me on "),b=e("strong",null,"Twitter",-1),v=t(),y={href:"https://twitter.com/fankesyooni",target:"_blank",rel:"noopener noreferrer"},x=t("@fankesyooni"),w=t("."),C=e("h2",{id:"help-with-maintenance",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#help-with-maintenance","aria-hidden":"true"},"#"),t(" Help with Maintenance")],-1),T=e("p",null,[t("Thank you for choosing and using "),e("code",null,"YukiReflection"),t(".")],-1),q=e("p",null,"If you have code-related suggestions and requests, you can submit a Pull Request on GitHub.",-1);function I(B,E){const o=a("ExternalLinkIcon");return c(),r("div",null,[_,l,e("p",null,[h,e("a",d,[u,n(o)]),p,e("a",f,[m,n(o)]),g]),e("p",null,[k,b,v,e("a",y,[x,n(o)]),w]),C,T,q])}const N=s(i,[["render",I],["__file","contacts.html.vue"]]);export{N as default}; diff --git a/docs/assets/contacts.html.f1c02fdf.js b/docs/assets/contacts.html.f1c02fdf.js deleted file mode 100644 index f748469..0000000 --- a/docs/assets/contacts.html.f1c02fdf.js +++ /dev/null @@ -1 +0,0 @@ -const t=JSON.parse('{"key":"v-193cf592","path":"/en/about/contacts.html","title":"Contact Us","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Help with Maintenance","slug":"help-with-maintenance","link":"#help-with-maintenance","children":[]}],"git":{"updatedTime":1695391325000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/about/contacts.md"}');export{t as data}; diff --git a/docs/assets/features.html.01536ff8.js b/docs/assets/features.html.01536ff8.js deleted file mode 100644 index 5872d5b..0000000 --- a/docs/assets/features.html.01536ff8.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c557cfcc","path":"/en/api/features.html","title":"Features","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Class Extensions","slug":"class-extensions","link":"#class-extensions","children":[{"level":3,"title":"Object Conversion","slug":"object-conversion","link":"#object-conversion","children":[]},{"level":3,"title":"Existential Judgment","slug":"existential-judgment","link":"#existential-judgment","children":[]},{"level":3,"title":"Vague Search","slug":"vague-search","link":"#vague-search","children":[]}]},{"level":2,"title":"Member Extensions","slug":"member-extensions","link":"#member-extensions","children":[{"level":3,"title":"Find and Reflection","slug":"find-and-reflection","link":"#find-and-reflection","children":[]},{"level":3,"title":"Optional Find Conditions","slug":"optional-find-conditions","link":"#optional-find-conditions","children":[]},{"level":3,"title":"Find in Super Class","slug":"find-in-super-class","link":"#find-in-super-class","children":[]},{"level":3,"title":"Vague Find","slug":"vague-find","link":"#vague-find","children":[]},{"level":3,"title":"Multiple Find","slug":"multiple-find","link":"#multiple-find","children":[]},{"level":3,"title":"Static Bytecode","slug":"static-bytecode","link":"#static-bytecode","children":[]},{"level":3,"title":"Obfuscated Bytecode","slug":"obfuscated-bytecode","link":"#obfuscated-bytecode","children":[]},{"level":3,"title":"Directly Called","slug":"directly-called","link":"#directly-called","children":[]},{"level":3,"title":"Find Again","slug":"find-again","link":"#find-again","children":[]},{"level":3,"title":"Relative Matching","slug":"relative-matching","link":"#relative-matching","children":[]},{"level":3,"title":"Calling Generics","slug":"calling-generics","link":"#calling-generics","children":[]},{"level":3,"title":"Pay Attention of Trap","slug":"pay-attention-of-trap","link":"#pay-attention-of-trap","children":[]}]},{"level":2,"title":"Common Type Extensions","slug":"common-type-extensions","link":"#common-type-extensions","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/api/features.md"}');export{e as data}; diff --git a/docs/assets/features.html.2e4ae9d9.js b/docs/assets/features.html.2e4ae9d9.js deleted file mode 100644 index 7ea1a41..0000000 --- a/docs/assets/features.html.2e4ae9d9.js +++ /dev/null @@ -1 +0,0 @@ -const l=JSON.parse('{"key":"v-47e315ee","path":"/zh-cn/api/features.html","title":"\u529F\u80FD\u4ECB\u7ECD","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Class \u6269\u5C55","slug":"class-\u6269\u5C55","link":"#class-\u6269\u5C55","children":[{"level":3,"title":"\u5BF9\u8C61\u8F6C\u6362","slug":"\u5BF9\u8C61\u8F6C\u6362","link":"#\u5BF9\u8C61\u8F6C\u6362","children":[]},{"level":3,"title":"\u5B58\u5728\u5224\u65AD","slug":"\u5B58\u5728\u5224\u65AD","link":"#\u5B58\u5728\u5224\u65AD","children":[]},{"level":3,"title":"\u6A21\u7CCA\u67E5\u627E","slug":"\u6A21\u7CCA\u67E5\u627E","link":"#\u6A21\u7CCA\u67E5\u627E","children":[]}]},{"level":2,"title":"Member \u6269\u5C55","slug":"member-\u6269\u5C55","link":"#member-\u6269\u5C55","children":[{"level":3,"title":"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528","slug":"\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528","link":"#\u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528","children":[]},{"level":3,"title":"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6","slug":"\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6","link":"#\u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6","children":[]},{"level":3,"title":"\u5728\u7236\u7C7B\u67E5\u627E","slug":"\u5728\u7236\u7C7B\u67E5\u627E","link":"#\u5728\u7236\u7C7B\u67E5\u627E","children":[]},{"level":3,"title":"\u6A21\u7CCA\u67E5\u627E","slug":"\u6A21\u7CCA\u67E5\u627E-1","link":"#\u6A21\u7CCA\u67E5\u627E-1","children":[]},{"level":3,"title":"\u591A\u91CD\u67E5\u627E","slug":"\u591A\u91CD\u67E5\u627E-1","link":"#\u591A\u91CD\u67E5\u627E-1","children":[]},{"level":3,"title":"\u9759\u6001\u5B57\u8282\u7801","slug":"\u9759\u6001\u5B57\u8282\u7801","link":"#\u9759\u6001\u5B57\u8282\u7801","children":[]},{"level":3,"title":"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801","slug":"\u6DF7\u6DC6\u7684\u5B57\u8282\u7801","link":"#\u6DF7\u6DC6\u7684\u5B57\u8282\u7801","children":[]},{"level":3,"title":"\u76F4\u63A5\u8C03\u7528","slug":"\u76F4\u63A5\u8C03\u7528","link":"#\u76F4\u63A5\u8C03\u7528","children":[]},{"level":3,"title":"\u518D\u6B21\u67E5\u627E","slug":"\u518D\u6B21\u67E5\u627E","link":"#\u518D\u6B21\u67E5\u627E","children":[]},{"level":3,"title":"\u76F8\u5BF9\u5339\u914D","slug":"\u76F8\u5BF9\u5339\u914D","link":"#\u76F8\u5BF9\u5339\u914D","children":[]},{"level":3,"title":"\u8C03\u7528\u6CDB\u578B","slug":"\u8C03\u7528\u6CDB\u578B","link":"#\u8C03\u7528\u6CDB\u578B","children":[]},{"level":3,"title":"\u6CE8\u610F\u8BEF\u533A","slug":"\u6CE8\u610F\u8BEF\u533A","link":"#\u6CE8\u610F\u8BEF\u533A","children":[]}]},{"level":2,"title":"\u5E38\u7528\u7C7B\u578B\u6269\u5C55","slug":"\u5E38\u7528\u7C7B\u578B\u6269\u5C55","link":"#\u5E38\u7528\u7C7B\u578B\u6269\u5C55","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/api/features.md"}');export{l as data}; diff --git a/docs/assets/features.html.65df35ac.js b/docs/assets/features.html.65df35ac.js deleted file mode 100644 index d274fb0..0000000 --- a/docs/assets/features.html.65df35ac.js +++ /dev/null @@ -1,771 +0,0 @@ -import{_ as t,r as e,o as c,c as i,b as s,d as l,a,e as n}from"./app.2add9aa5.js";const r={},d=a(`

    Features

    This page contains usage examples for all core features of YukiReflection.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
    -var instance = Class.forName("com.demo.Test")
    -// Specify the Class in the ClassLoader environment
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = customClassLoader?.loadClass("com.demo.Test")
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Get this Class directly
    -var instance = "com.demo.Test".toClass()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = "com.demo.Test".toClass(customClassLoader)
    -

    If the current Class does not exist, using the above method will throw an exception.

    If you are not sure whether the Class exists, you can refer to the following solutions.

    The following example

    // Get this Class directly
    -// If not available, the result will be null but no exception will be thrown
    -var instance = "com.demo.Test".toClassOrNull()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -// If not available, the result will be null but no exception will be thrown
    -var instance = "com.demo.Test".toClassOrNull(customClassLoader)
    -

    We can also get an existing Class object by mapping.

    The following example

    // Assume this Class can be obtained directly
    -var instance = classOf<Test>()
    -// We can also customize the ClassLoader where the Class is located, which is very effective for stubs
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = classOf<Test>(customClassLoader)
    -

    Tips

    For more functions, please refer to classOf, String.toClass, String.toClassOrNull methods.

    Existential Judgment

    Suppose we want to determine whether a Class exists.

    Usually, we can use the standard reflection API to find this Class to determine whether it exists by exception.

    The following example

    // Class in the default ClassLoader environment
    -var isExist = try {
    -    Class.forName("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -// Specify the Class in the ClassLoader environment
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var isExist = try {
    -    customClassLoader?.loadClass("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Check if this class exists
    -var isExist = "com.demo.Test".hasClass()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var isExist = "com.demo.Test".hasClass(customClassLoader)
    -

    Tips

    For more functions, please refer to String.hasClass method.

    `,31),y={id:"vague-search",tabindex:"-1"},A=s("a",{class:"header-anchor",href:"#vague-search","aria-hidden":"true"},"#",-1),u=n(" Vague Search\u2002"),m=a('

    The Class name in the current app's Dex after being obfuscated by tools such as R8 will be difficult to distinguish.

    Its correct position is uncertain, and cannot be obtained directly through Object Conversion.

    At this point, there is DexClassFinder, its role is to determine the instance of this Class by the bytecode features in the Class that need to be searched.

    Notice

    This feature is only available on the Android platform.

    At present, the function of DexClassFinder is still in the experimental stage.

    Since the search function is only implemented through the Java layer, the performance may not reach the optimal level when there are too many current app's Class.

    If something got wrong welcome to feedback.

    Since it is a reflection-level API, currently it can only locate the specified Class through the characteristics of Class and Member, and cannot locate it by specifying the string and method content characteristics in the bytecode.

    The speed of searching Class depends on the performance of the current device.

    At present, the mainstream mobile processors are in the 3~10s range when the conditions are not complicated in the 10~15w number of Class, the fastest speed can reach within 25s under slightly complex conditions.

    Please note that the more the same type Class is matched, the slower the speed.

    ',4),v={class:"custom-container danger"},C=s("p",{class:"custom-container-title"},"Pay Attention",-1),h=s("p",null,[n("After "),s("strong",null,"YukiHookAPI"),n(" 2.x.x released, this function will be deprecated and will be removed directly from "),s("strong",null,"YukiReflection"),n(".")],-1),D=n("We welcome all developers to start using "),B={href:"https://github.com/LuckyPray/DexKit",target:"_blank",rel:"noopener noreferrer"},b=n("DexKit"),F=n(", which is a high-performance runtime parsing library for "),g=s("strong",null,"Dex",-1),f=n(" implemented in C++, which is more efficient than the Java layer in terms of performance, efficient and excellent, it is still in the development stage, your valuable suggestions are welcome."),k=a(`

    Get Started

    Below is a simple usage example.

    Suppose the following Class is what we want, the names are obfuscated and may be different in each version.

    The following example

    package com.demo;
    -
    -public class a extends Activity implements Serializable {
    -
    -    public a(String var1) {
    -        // ...
    -    }
    -
    -    private String a;
    -
    -    private String b;
    -
    -    private boolean a;
    -
    -    protected void onCreate(Bundle var1) {
    -        // ...
    -    }
    -
    -    private static void a(String var1) {
    -        // ...
    -    }
    -
    -    private String a(boolean var1, String var2) {
    -        // ...
    -    }
    -
    -    private void a() {
    -        // ...
    -    }
    -
    -    public void a(boolean var1, a var2, b var3, String var4) {
    -        // ...
    -    }
    -}
    -

    At this point, we want to get this Class, you can use the ClassLoader.searchClass method directly.

    Each of the conditions demonstrated below is optional, and the more complex the conditions, the more accurate the positioning and the worse the performance.

    The following example

    searchClass {
    -    // Start the search from the specified package name range
    -    // In actual use, you can specify multiple package name ranges at the same time
    -    from("com.demo")
    -    // Specify the result of getSimpleName of the current Class
    -    // You can directly make logical judgments on this string
    -    // Here we are not sure whether its name is a, we can only judge the length of the string
    -    simpleName { it.length == 1 }
    -    // Specify the inherited parent class object
    -    // If it is an existing stub, it can be directly represented by generics
    -    extends<Activity>()
    -    // Specify the inherited parent class object
    -    // Which can be written directly as the full class name
    -    // And you can also specify multiple objects at the same time
    -    extends("android.app.Activity")
    -    // Specify the implemented interface
    -    // If it exists stub, can be directly represented by generics
    -    implements<Serializable>()
    -    // Specify the implemented interface
    -    // Which can be written directly as a full class name, or you can specify multiple at the same time
    -    implements("java.io.Serializable")
    -    // Specify the type and style of the constructor
    -    // And the number count that exists in the current class
    -    constructor { param(StringClass) }.count(num = 1)
    -    // Specify the type and style of the variable
    -    // And the number that exists in the current class count
    -    field { type = StringClass }.count(num = 2)
    -    // Specify the type and style of the variable
    -    // And the number that exists in the current class count
    -    field { type = BooleanType }.count(num = 1)
    -    // Directly specify the number of all variables that exist in the current class count
    -    field().count(num = 3)
    -    // If you think the number of variables is indeterminate
    -    // You can also use the following custom conditions
    -    field().count(1..3)
    -    field().count { it >= 3 }
    -    // Specify the type and style of the method
    -    // And the number that exists in the current class count
    -    method {
    -        name = "onCreate"
    -        param(BundleClass)
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isStatic && isPrivate }
    -        param(StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, StringClass)
    -        returnType = StringClass
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        emptyParam()
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // As well as the modifier and VagueType
    -    // And the number count that exists in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, VagueType, VagueType, StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Directly specify the number of all methods that exist in the current class count
    -    method().count(num = 5)
    -    // If you think the number of methods is uncertain, you can also use the following custom conditions
    -    method().count(1..5)
    -    method().count { it >= 5 }
    -    // Directly specify the number of all members existing in the current class count
    -    // Members include: Field, Method, Constructor
    -    member().count(num = 9)
    -    // There must be a static modifier in all members, you can add this condition like this
    -    member {
    -        modifiers { isStatic }
    -    }
    -}.get() // Get the instance of this Class itself, if not found, it will return null
    -

    Tips

    The conditional usage of Field, Method, Constructor in the above usage is consistent with the related usage in Member Extensions, with only minor differences.

    For more functions, please refer to MemberRules, FieldRules, MethodRules, ConstructorRules.

    By default, DexClassFinder will use synchronous mode to search Class, which will block the current thread until it finds or finds an exception.

    If the search takes too long, it may cause ANR problems to the current app.

    In response to the above problems, we can enable asynchronous, just add the parameter async = true, which will not require you to start a thread again, the API has already handled the related problems for you.

    Notice

    To use this function, you need to pass in the Context of the current app as the first method parameter.

    For the asynchronous case you need to use the wait method to get the result, the get method will no longer work.

    The following example

    val context: Context // Assume this is the Context of the current app
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class1 ->
    -    // Get asynchronous result
    -}
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class2 ->
    -    // Get asynchronous result
    -}
    -

    In this way, our search process runs asynchronously, it will not block the main thread, and each search will be performed in a separate thread at the same time, which can achieve the effect of parallel tasks.

    Local Cache

    Since the search is performed again every time the current app is reopened, this is a waste of repetitive performance when the current app's version is unchanged.

    At this point, we can locally cache the search results of the current app's version by specifying the name parameter.

    Next time, the found class name will be directly read from the local cache.

    The local cache uses SharedPreferences, which will be saved to the app's data directory and will be re-cached after the app's version is updated.

    After enabling the local cache, async = true will be set at the same time, you don't need to set it manually.

    Notice

    To use this function, you need to pass in the Context of the current app as the first method parameter.

    The following example

    val context: Context // Assume this is the Context of the current app
    -searchClass(context, name = "com.demo.class1") {
    -    // ...
    -}.wait { class1 ->
    -    // Get asynchronous result
    -}
    -searchClass(context, name = "com.demo.class2") {
    -    // ...
    -}.wait { class2 ->
    -    // Get asynchronous result
    -}
    -

    If you want to clear the local cache manually, you can use the following method to clear the current version of the current app's cache.

    The following example

    val context: Context // Assume this is the Context of the current app
    -DexClassFinder.clearCache(context)
    -

    You can also clear the app's cache for a specific version.

    The following example

    val context: Context // Assume this is the Context of the current app
    -DexClassFinder.clearCache(context, versionName = "1.0", versionCode = 1)
    -

    If you need to search a set of Class at the same time using a fixed condition, then you only need to use the all or waitAll method to get the result.

    // Synchronous search, use all to get all the results found by the conditions
    -searchClass {
    -    // ...
    -}.all().forEach { clazz ->
    -    // Get each result
    -}
    -// Synchronous search, using all { ... } to iterate over each result
    -searchClass {
    -    // ...
    -}.all { clazz ->
    -    // Get each result
    -}
    -// Asynchronous search, use waitAll to get all the results found by the conditions
    -val context: Context // Assume this is the Context of the current app
    -searchClass(context, async = true) {
    -    // ...
    -}.waitAll { classes ->
    -    classes.forEach {
    -        // Get each result
    -    }
    -}
    -

    Tips

    For more functions, please refer to ClassLoader.searchClass method.

    Member Extensions

    Here are the extension functions related to the Class bytecode member variables Field, Method, Constructor.

    Tips

    Member is the interface description object of Field, Method, Constructor, which is the general term for the bytecode members in Class in Java reflection.

    Suppose there is such a Class.

    The following example

    package com.demo;
    -
    -public class BaseTest {
    -
    -    public BaseTest() {
    -        // ...
    -    }
    -
    -    public BaseTest(boolean isInit) {
    -        // ...
    -    }
    -
    -    private void doBaseTask(String taskName) {
    -        // ...
    -    }
    -}
    -
    package com.demo;
    -
    -public class Test extends BaseTest {
    -
    -    public Test() {
    -        // ...
    -    }
    -
    -    public Test(boolean isInit) {
    -        // ...
    -    }
    -
    -    private static TAG = "Test";
    -
    -    private BaseTest baseInstance;
    -
    -    private String a;
    -
    -    private boolean a;
    -
    -    private boolean isTaskRunning = false;
    -
    -    private static void init() {
    -        // ...
    -    }
    -
    -    private void doTask(String taskName) {
    -        // ...
    -    }
    -
    -    private void release(String taskName, Function<boolean, String> task, boolean isFinish) {
    -        // ...
    -    }
    -
    -    private void stop() {
    -        // ...
    -    }
    -
    -    private String getName() {
    -        // ...
    -    }
    -
    -    private void b() {
    -        // ...
    -    }
    -
    -    private void b(String a) {
    -        // ...
    -    }
    -}
    -

    Find and Reflection

    Suppose we want to get the doTask method of Test and execute it.

    Normally, we can use the standard reflection API to find this method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using reflection API
    -Test::class.java
    -    .getDeclaredMethod("doTask", String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(instance, "task_name")
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Tips

    For more features, please refer to MethodFinder.

    Similarly, we need to get the isTaskRunning field can also be written as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    name = "isTaskRunning"
    -    type = BooleanType
    -}.get(instance).any() // Any instantiates an object of any type of Field
    -

    Tips

    For more features, please refer to FieldFinder.

    Maybe you also want to get the current Class constructor, the same can be achieved.

    The following example

    Test::class.java.constructor {
    -    param(BooleanType)
    -}.get().call(true) // Can create a new instance
    -

    If you want to get the no-argument constructor of Class, you can write it as follows.

    The following example

    Test::class.java.constructor().get().call() // Create a new instance
    -

    Tips

    For more features, please refer to ConstructorFinder.

    Optional Find Conditions

    Suppose we want to get the getName method in Class, which can be implemented as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -    returnType = StringClass
    -}.get(instance).string() // Get the result of the method
    -

    Through observation, it is found that there is only one method named getName in this Class, so can we make it simpler?

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -}.get(instance).string() // Get the result of the method
    -

    Yes, you can refine your find criteria for methods that do not change exactly.

    When using only get or wait methods to get results, YukiReflection will match the first found result in bytecode order by default.

    The problem comes again, this Class has a release method, but its method parameters are very long, and some types may not be directly available.

    Normally we would use param(...) to find this method, but is there an easier way.

    At this point, after determining the uniqueness of the method, you can use paramCount to find the method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "release"
    -    // At this point
    -    // We don't have to determine the specific type of method parameters, just write the number
    -    paramCount = 3
    -}.get(instance) // Get this method
    -

    Although the above example can be successfully matched, it is not accurate.

    At this time, you can also use VagueType to fill in the method parameter type that you do not want to fill in.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "release"
    -    // Use VagueType to fill in the type you don't want to fill in
    -    // While ensuring that other types can match
    -    param(StringClass, VagueType, BooleanType)
    -}.get(instance) // Get this method
    -

    If you are not sure about the type of each parameter, you can create a conditional method body with the param { ... } method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -     name = "release"
    -     // Get the it (Class) method parameter type array instance
    -     // To only determine the known type and its position
    -     param { it[0] == StringClass && it[2] == BooleanType }
    -}.get(instance) // Get this method
    -

    Tips

    Use param { ... } to create a conditional method body, where the variable it is the Class type array instance of the current method parameter, and you can freely use Class all objects and their methods in.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.type, MethodFinder.param, MethodFinder.returnType, ConstructorFinder.param method.

    Find in Super Class

    You will notice that Test extends BaseTest, now we want to get the doBaseTask method of BaseTest, how do we do it without knowing the name of the super class?

    Referring to the above find conditions, we only need to add a superClass to the find conditions to achieve this function.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // Just add this condition
    -    superClass()
    -}.get(instance).call("task_name")
    -

    At this time, we can get this method in the super class.

    superClass has a parameter isOnlySuperClass, when set to true, you can skip the current Class and only find the super class of the current Class.

    Since we now know that the doBaseTask method only exists in the super class, this condition can be added to save finding time.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // Add a find condition
    -    superClass(isOnlySuperClass = true)
    -}.get(instance).call("task_name")
    -

    At this time, we can also get this method in the super class.

    Once superClass is set, it will automatically cycle backward to find out whether this method exists in all extends super classes, until it finds that the target has no super class (the extends is java.lang.Object).

    Tips

    For more functions, please refer to MethodFinder.superClass, ConstructorFinder.superClass, FieldFinder.superClass methods.

    Pay Attention

    The currently founded Method can only find the Method of the current Class unless the superClass condition is specified, which is the default behavior of the Java Reflection API.

    Vague Find

    If we want to find a method name, but are not sure if it has changed in each release, we can use vague find.

    Suppose we want to get the doTask method in Class, which can be implemented as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Set name is case insensitive
    -        it.equals("dotask", isIgnoreCase = true)
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Knowing that there is currently only one doTask method in Class, we can also judge that the method name contains only the characters specified in it.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Only contains oTas
    -        it.contains("oTas")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    We can also judge based on the first and last strings.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Contains do at the beginning and Task at the end
    -        it.startsWith("do") && it.endsWith("Task")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    By observing that this method name contains only letters, we can add a precise search condition.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Start with do, end with Task, just letters
    -        it.startsWith("do") && it.endsWith("Task") && it.isOnlyLetters()
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Tips

    Use name { ... } to create a conditional method body, where the variable it is the string of the current name, and you can freely use it in the extension method of NameRules function.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.name, MethodFinder.name methods and NameRules.

    Multiple Find

    Sometimes, we may need to find a set of methods, constructors, and fields with the same characteristics in a Class.

    At this time, we can use relative condition matching to complete.

    Based on the result of the find condition, we only need to replace get with all to get all the bytecodes that match the condition.

    Suppose this time we want to get all methods in Class with the number of method parameters in the range 1..3, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    paramCount(1..3)
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 3 methods.

    private void doTask(String taskName)

    private void release(String taskName, Function<boolean, String> task, boolean isFinish)

    private void b(String a)

    If you want to define the conditions for the range of the number of parameters more freely, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    paramCount { it < 3 }
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 6 methods.

    private static void init()

    private void doTask(String taskName)

    private void stop(String a)

    private void getName(String a)

    private void b()

    private void b(String a)

    By observing that there are two methods named b in Class, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "b"
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 2 methods.

    private void b()

    private void b(String a)

    Tips

    Use paramCount { ... } to create a conditional method body, where the variable it is the integer of the current number of parameters, and you can use it freely in the extension method of CountRules function in it.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to MethodFinder.paramCount, ConstructorFinder.paramCount methods and CountRules.

    Static Bytecode

    Some methods and fields are statically implemented in Class, at this time, we can call them without passing in an instance.

    Suppose we want to get the contents of the static field TAG this time.

    The following example

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -}.get().string() // The type of Field is string and can be cast directly
    -

    Assuming that there is a non-static TAG field with the same name in Class, what should I do at this time?

    Just add a filter.

    The following example

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -    // This field to identify the lookup needs to be static
    -    modifiers { isStatic }
    -}.get().string() // The type of Field is string and can be cast directly
    -

    We can also call a static method called init.

    The following example

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -}.get().call()
    -

    Likewise, you can identify it as a static.

    The following example

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -    // This method of identity find needs to be static
    -    modifiers { isStatic }
    -}.get().call()
    -

    Tips

    Use modifiers { ... } to create a conditional method body, at which point you can freely use its functionality in ModifierRules.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.modifiers, MethodFinder.modifiers, ConstructorFinder.modifiers methods and ModifierRules.

    Obfuscated Bytecode

    You may have noticed that the example Class given here has two obfuscated field names, both of which are a, how do we get them at this time?

    There are two options.

    The first option is to determine the name and type of the field.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    name = "a"
    -    type = BooleanType
    -}.get(instance).any() // Get a field named a with type Boolean
    -

    The second option is to determine where the type of the field is located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    type(BooleanType).index().first()
    -}.get(instance).any() // Get the first field of type Boolean
    -

    In the above two cases, the corresponding field private boolean a can be obtained.

    Likewise, there are two obfuscated method names in this Class, both of which are b.

    You can also have two options to get them.

    The first option is to determine the method name and method parameters.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "b"
    -    param(StringClass)
    -}.get(instance).call("test_string") // Get the method whose name is b and whose parameter is [String]
    -

    The second option is to determine where the parameters of the method are located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    param(StringClass).index().first()
    -}.get(instance).call("test_string") // Get the method whose first method parameter is [String]
    -

    Since it is observed that this method is last in Class, then we have an alternative.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    order().index().last()
    -}.get(instance).call("test_string") // Get the last method of the current Class
    -

    Notice

    Please try to avoid using order to filter bytecode subscripts, they may be indeterminate unless you are sure that its position in this Class must not change.

    Directly Called

    The methods of calling bytecode described above all need to use get(instance) to call the corresponding method.

    Is there a simpler way?

    At this point, you can use the current method on any instance to create a call space.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // Execute the doTask method
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -    // Execute the stop method
    -    method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -    // Get name
    -    val name = method { name = "getName" }.string()
    -}
    -

    We can also use superClass to call methods of the current Class super class.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // Execute the doBaseTask method of the parent class
    -    superClass().method {
    -        name = "doBaseTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    If you don't like to use a lambda to create the namespace of the current instance, you can use the current() method directly.

    The following example

    // Assuming this is an instance of this Class, this Class cannot be obtained directly
    -val instance = Test()
    -// Execute the doTask method
    -instance
    -    .current()
    -    .method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -// Execute the stop method
    -instance
    -    .current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// Get name
    -val name = instance.current().method { name = "getName" }.string()
    -

    Likewise, consecutive calls can be made between them, but inline calls are not allowed.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}.current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// \u2757 Note that because current() returns the CurrentClass object itself
    -// It CANNOT BE CALLED like the following
    -instance.current().current()
    -

    For Field instances, there is also a convenience method that can directly get the object of the instance where Field is located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // <Plan 1>
    -    field {
    -        name = "baseInstance"
    -    }.current {
    -        method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }.call("task_name")
    -    }
    -    // <Plan 2>
    -    field {
    -        name = "baseInstance"
    -    }.current()
    -        ?.method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }?.call("task_name")
    -}
    -

    Notice

    The above current method is equivalent to calling the field { ... }.any()?.current() method in CurrentClass for you.

    If there is no CurrentClass calling field, you need to use field { ... }.get(instance).current() to call it.

    The problem comes again, I want to use reflection to create the following instance and call the method in it, how to do it?

    The following example

    Test(true).doTask("task_name")
    -

    Usually, we can use the standard reflection API to call.

    The following example

    "com.demo.Test".toClass()
    -    .getDeclaredConstructor(Boolean::class.java)
    -    .apply { isAccessible = true }
    -    .newInstance(true)
    -    .apply {
    -        javaClass
    -            .getDeclaredMethod("doTask", String::class.java)
    -            .apply { isAccessible = true }
    -            .invoke(this, "task_name")
    -    }
    -

    But I feel that this approach is very troublesome.

    Is there a more concise way to call it?

    At this time, we can also use the buildOf method to create an instance.

    The following example

    "com.demo.Test".toClass().buildOf(true) { param(BooleanType) }?.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    If you want the buildOf method to return the type of the current instance, you can include a type-generic declaration in it instead of using as to cast the target type.

    In this case, the constructor of the instance itself is private, but the method inside is public, so we only need to create its constructor by reflection.

    The following example

    // Assume this Class can be obtained directly
    -val test = Test::class.java.buildOf<Test>(true) { param(BooleanType) }
    -test.doTask("task_name")
    -

    Tips

    For more functions, please refer to CurrentClass and Class.buildOf method.

    Find Again

    Suppose there are three different versions of Class, all of which are the same Class for different versions of this app.

    There is also a method doTask in it, assuming they function the same.

    The following example of version A

    public class Test {
    -
    -    public void doTask() {
    -        // ...
    -    }
    -}
    -

    The following example of version B

    public class Test {
    -
    -    public void doTask(String taskName) {
    -        // ...
    -    }
    -}
    -

    The following example of version C

    public class Test {
    -
    -    public void doTask(String taskName, int type) {
    -        // ...
    -    }
    -}
    -

    We need to get this same functionality of the doTask method in a different version, how do we do it?

    At this point, you can use RemedyPlan to complete your needs.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -    method {
    -        name = "doTask"
    -        param(StringClass, IntType)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -}.wait(instance) {
    -    // Get the result of the method
    -}
    -

    Pay Attention

    The method lookup result using RemedyPlan can no longer use get to get method instance, you should use wait method.

    Also, you can continue to use RemedyPlan while using Multiple Find.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        paramCount(0..1)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -    method {
    -        name = "doTask"
    -        paramCount(1..2)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -}.waitAll(instance) {
    -    // Get the result of the method
    -}
    -

    Relative Matching

    Suppose there is a Class with the same function in different versions of the current app but only the name of the Class is different.

    The following example of version A

    public class ATest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    The following example of version B

    public class BTest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    At this time, what should we do if we want to call the doTask method in this Class in each version?

    The usual practice is to check if Class exists.

    The following example

    // First find this Class
    -val currentClass =
    -    if("com.demo.ATest".hasClass()) "com.demo.ATest".toClass() else "com.demo.BTest".toClass()
    -// Then look for this method and call
    -currentClass.method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    I feel that this solution is very inelegant and cumbersome, then YukiReflection provides you with a very convenient VariousClass to solve this problem.

    Now, you can get this Class directly using the following methods.

    The following example

    VariousClass("com.demo.ATest", "com.demo.BTest").get().method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    If the current Class exists in the specified ClassLoader, you can fill in your ClassLoader in get.

    The following example

    val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").get(customClassLoader).method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    If you are not sure that all Class will be matched, you can use the getOrNull method.

    The following example

    val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").getOrNull(customClassLoader)?.method {
    -     name = "doTask"
    -     emptyParam()
    -}?.get()?.call()
    -

    Tips

    For more functions, please refer to VariousClass.

    Calling Generics

    In the process of reflection, we may encounter generic problems.

    In the reflection processing of generics, YukiReflection also provides a syntactic sugar that can be used anywhere.

    For example we have the following generic class.

    The following example

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -

    When we want to get a Class instance of the generic T or R in the current Class, only the following implementation is required.

    The following example

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // Get the operation object of the current instance
    -        // Get the Class instance of T, in the 0th position of the parameter
    -        // The default value can not be written
    -        val tClass = current().generic()?.argument()
    -        // Get the Class instance of R, in parameter 1
    -        val rClass = current().generic()?.argument(index = 1)
    -        // You can also use the following syntax
    -        current().generic {
    -             // Get the Class instance of T
    -             // In the 0th position of the parameter, the default value can be left blank
    -            val tClass = argument()
    -            // Get the Class instance of R, in parameter 1
    -            val rClass = argument(index = 1)
    -        }
    -    }
    -}
    -

    When we want to call this Class externally, it can be implemented as follows.

    The following example

    // Assume this is the Class of T
    -class TI {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -// Assume this is an instance of T
    -val tInstance: TI? = ...
    -// Get the Class instance of T
    -// In the 0th position of the parameter, the default value can be left blank
    -// And get the method foo and call it
    -TestGeneric::class.java.generic()?.argument()?.method {
    -    name = "foo"
    -    emptyParam()
    -}?.get(tInstance)?.invoke<TI>()
    -

    Tips

    For more functions, please refer to CurrentClass.generic, Class.generic methods and GenericClass.

    Pay Attention of Trap

    Here are some misunderstandings that may be encountered during use for reference.

    Restrictive Find Conditions

    Pay Attention

    In find conditions you can only use index function once except order.

    The following example

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    // \u2757 Wrong usage, please keep only one index method
    -    returnType(StringClass).index(num = 1)
    -}
    -

    The following find conditions can be used without any problems.

    The following example

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    order().index(num = 1)
    -}
    -

    Necessary Find Conditions

    Pay Attention

    In common method find conditions, even methods without parameters need to set find conditions.

    Suppose we have the following Class.

    The following example

    public class TestFoo {
    -
    -    public void foo(String string) {
    -        // ...
    -    }
    -
    -    public void foo() {
    -        // ...
    -    }
    -}
    -

    We want to get the public void foo() method, which can be written as follows.

    The following example

    TestFoo::class.java.method {
    -    name = "foo"
    -}
    -

    However, the above example is wrong.

    You will find two foo methods in this Class, one of which takes a method parameter.

    Since the above example does not set the find conditions for param, the result will be the first method public void foo(String string) that matches the name and matches the bytecode order, not the last method we need.

    This is a frequent error, without method parameters, you will lose the use of method parameter find conditions.

    The correct usage is as follows.

    The following example

    TestFoo::class.java.method {
    -    name = "foo"
    -    // \u2705 Correct usage, add detailed filter conditions
    -    emptyParam()
    -}
    -

    At this point, the above example will perfectly match the public void foo() method.

    Abbreviated Find Conditions

    In the construction method find conditions, constructors without parameters do not need to fill in the find conditions.

    Suppose we have the following Class.

    The following example

    public class TestFoo {
    -
    -    public TestFoo() {
    -        // ...
    -    }
    -}
    -

    We want to get the public TestFoo() constructor, which can be written as follows.

    The following example

    TestFoo::class.java.constructor { emptyParam() }
    -

    The above example can successfully obtain the public TestFoo() constructor, but it feels a bit cumbersome.

    Unlike normal methods, since the constructor does not need to consider the name, when the constructor has no parameters, we can omit the emptyParam parameter.

    The following example

    TestFoo::class.java.constructor()
    -

    Bytecode Type

    Pay Attention

    In the bytecode call result, the cast method can only specify the type corresponding to the bytecode.

    For example we want to get a field of type Boolean and cast it to String.

    The following is the wrong way to use it.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().string() // \u2757 Wrong usage, must be cast to the bytecode target type
    -

    The following is the correct way to use it.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().boolean().toString() // \u2705 The correct way to use, get the type and then convert
    -

    Common Type Extensions

    When find methods and fields, we usually need to specify the type in find conditions.

    The following example

    field {
    -    name = "test"
    -    type = Boolean::class.javaPrimitiveType
    -}
    -

    Expressing the type of Boolean::class.javaPrimitiveType in Kotlin is very long and inconvenient.

    Therefore, YukiReflection encapsulates common type calls for developers, including Android related types and Java common types and primitive type keywords.

    At this time, the above type can be written in the following form.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}
    -

    The primitive type keywords in common Java types have been encapsulated as Type(Class Name) + Type, such as IntType, FloatType (their bytecode types are int, float).

    Correspondingly, array types also have convenient usage methods, assuming we want to get an array of type String[].

    You need to write java.lang.reflect.Array.newInstance(String::class.java, 0).javaClass to get this type.

    Does it feel very troublesome, at this time we can use the method ArrayClass(StringClass) to get this type.

    At the same time, since String is a common type, you can also directly use StringArrayClass to get this type.

    The methods found in some common requirements have their corresponding encapsulation types for use, in the format Type(Class Name) + Class.

    The following are wrapper names for some special case types in Java represented in YukiReflection.

    • void \u2192 UnitType

    • java.lang.Void \u2192 UnitClass

    • java.lang.Object \u2192 AnyClass

    • java.lang.Integer \u2192 IntClass

    • java.lang.Character \u2192 CharClass

    Notice

    Encapsulating types with Type(Class Name) + Type will and only be represented as Java primitive type keywords.

    Since the concept of primitive types does not exist in Kotlin, they will all be defined as KClass.

    There are 9 primitive type keywords in Java, of which 8 are primitive type, namely boolean, char, byte, short , int, float, long, double, of which the void type is a special case.

    At the same time, they all have their own corresponding package types in Java, such as java.lang.Boolean, java.lang.Integer, these types are unequal, Please note the distinction.

    Similarly, arrays also have corresponding wrapper types, which also need to be distinguished from Java primitive type keywords.

    For example, the encapsulation type of byte[] is ByteArrayType or ArrayClass(ByteType), and the encapsulation type of Byte[] is ByteArrayClass or ArrayClass(ByteClass), these types are also unequal.

    At the same time, you are welcome to contribute more commonly used types.

    `,335);function w(T,q){const o=e("Badge"),p=e("ExternalLinkIcon");return c(),i("div",null,[d,s("h3",y,[A,u,l(o,{type:"tip",text:"Beta",vertical:"middle"})]),m,s("div",v,[C,h,s("p",null,[D,s("a",B,[b,l(p)]),F,g,f])]),k])}const S=t(r,[["render",w],["__file","features.html.vue"]]);export{S as default}; diff --git a/docs/assets/features.html.9a3194da.js b/docs/assets/features.html.9a3194da.js deleted file mode 100644 index b0ee0a3..0000000 --- a/docs/assets/features.html.9a3194da.js +++ /dev/null @@ -1,746 +0,0 @@ -import{_ as c,r as l,o as r,c as t,b as s,d as e,a,e as n}from"./app.2add9aa5.js";const i={},d=a(`

    \u529F\u80FD\u4ECB\u7ECD

    \u8FD9\u91CC\u5305\u542B\u4E86 YukiReflection \u5168\u90E8\u6838\u5FC3\u529F\u80FD\u7684\u7528\u6CD5\u793A\u4F8B\u3002

    Class \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5BF9\u8C61\u81EA\u8EAB\u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5BF9\u8C61\u8F6C\u6362

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230\u4E00\u4E2A\u4E0D\u80FD\u76F4\u63A5\u8C03\u7528\u7684 Class\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    -var instance = Class.forName("com.demo.Test")
    -// \u6307\u5B9A ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -var instance = customClassLoader?.loadClass("com.demo.Test")
    -

    \u8FD9\u79CD\u5199\u6CD5\u5927\u6982\u4E0D\u662F\u5F88\u53CB\u597D\uFF0C\u6B64\u65F6 YukiReflection \u5C31\u4E3A\u4F60\u63D0\u4F9B\u4E86\u4E00\u4E2A\u53EF\u5728\u4EFB\u610F\u5730\u65B9\u4F7F\u7528\u7684\u8BED\u6CD5\u7CD6\u3002

    \u4EE5\u4E0A\u5199\u6CD5\u6362\u505A YukiReflection \u53EF\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u76F4\u63A5\u5F97\u5230\u8FD9\u4E2A Class
    -var instance = "com.demo.Test".toClass()
    -// \u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -var instance = "com.demo.Test".toClass(customClassLoader)
    -

    \u5982\u679C\u5F53\u524D Class \u5E76\u4E0D\u5B58\u5728\uFF0C\u4F7F\u7528\u4E0A\u8FF0\u65B9\u6CD5\u4F1A\u629B\u51FA\u5F02\u5E38\uFF0C\u5982\u679C\u4F60\u4E0D\u786E\u5B9A Class \u662F\u5426\u5B58\u5728\uFF0C\u53EF\u4EE5\u53C2\u8003\u4E0B\u9762\u7684\u89E3\u51B3\u65B9\u6848\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u76F4\u63A5\u5F97\u5230\u8FD9\u4E2A Class
    -// \u5F97\u4E0D\u5230\u65F6\u7ED3\u679C\u4F1A\u4E3A null \u4F46\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38
    -var instance = "com.demo.Test".toClassOrNull()
    -// \u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -// \u5F97\u4E0D\u5230\u65F6\u7ED3\u679C\u4F1A\u4E3A null \u4F46\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38
    -var instance = "com.demo.Test".toClassOrNull(customClassLoader)
    -

    \u6211\u4EEC\u8FD8\u53EF\u4EE5\u901A\u8FC7\u6620\u5C04\u6765\u5F97\u5230\u4E00\u4E2A\u5B58\u5728\u7684 Class \u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u80FD\u591F\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -var instance = classOf<Test>()
    -// \u6211\u4EEC\u540C\u6837\u53EF\u4EE5\u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader\uFF0C\u8FD9\u5BF9\u4E8E stub \u6765\u8BF4\u975E\u5E38\u6709\u6548
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -var instance = classOf<Test>(customClassLoader)
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 classOf\u3001String.toClass\u3001String.toClassOrNull \u65B9\u6CD5\u3002

    \u5B58\u5728\u5224\u65AD

    \u5047\u8BBE\u6211\u4EEC\u8981\u5224\u65AD\u4E00\u4E2A Class \u662F\u5426\u5B58\u5728\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A Class \u901A\u8FC7\u5F02\u5E38\u6765\u5224\u65AD\u662F\u5426\u5B58\u5728\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9ED8\u8BA4 ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    -var isExist = try {
    -    Class.forName("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -// \u6307\u5B9A ClassLoader \u73AF\u5883\u4E0B\u7684 Class
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -var isExist = try {
    -    customClassLoader?.loadClass("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -

    \u8FD9\u79CD\u5199\u6CD5\u5927\u6982\u4E0D\u662F\u5F88\u53CB\u597D\uFF0C\u6B64\u65F6 YukiReflection \u5C31\u4E3A\u4F60\u63D0\u4F9B\u4E86\u4E00\u4E2A\u53EF\u5728\u4EFB\u610F\u5730\u65B9\u4F7F\u7528\u7684\u8BED\u6CD5\u7CD6\u3002

    \u4EE5\u4E0A\u5199\u6CD5\u6362\u505A YukiReflection \u53EF\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5224\u65AD\u8FD9\u4E2A Class \u662F\u5426\u5B58\u5728
    -var isExist = "com.demo.Test".hasClass()
    -// \u81EA\u5B9A\u4E49 Class \u6240\u5728\u7684 ClassLoader
    -val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -var isExist = "com.demo.Test".hasClass(customClassLoader)
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 String.hasClass \u65B9\u6CD5\u3002

    `,28),y={id:"\u6A21\u7CCA\u67E5\u627E",tabindex:"-1"},A=s("a",{class:"header-anchor",href:"#\u6A21\u7CCA\u67E5\u627E","aria-hidden":"true"},"#",-1),u=n(" \u6A21\u7CCA\u67E5\u627E\u2002"),v=a('

    \u5728 R8 \u7B49\u5DE5\u5177\u6DF7\u6DC6\u540E\u7684\u5F53\u524D APP Dex \u4E2D\u7684 Class \u540D\u79F0\u5C06\u4F1A\u96BE\u4EE5\u5206\u8FA8\uFF0C\u4E14\u4E0D\u786E\u5B9A\u5176\u6B63\u786E\u4F4D\u7F6E\uFF0C\u4E0D\u80FD\u76F4\u63A5\u901A\u8FC7 \u5BF9\u8C61\u8F6C\u6362 \u6765\u5F97\u5230\u3002

    \u6B64\u65F6\u5C31\u6709\u4E86 DexClassFinder\uFF0C\u5B83\u7684\u4F5C\u7528\u662F\u901A\u8FC7\u9700\u8981\u67E5\u627E\u7684 Class \u4E2D\u7684\u5B57\u8282\u7801\u7279\u5F81\u6765\u786E\u5B9A\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B\u3002

    \u6CE8\u610F

    \u6B64\u529F\u80FD\u4EC5\u9002\u7528\u4E8E Android \u5E73\u53F0\u3002

    \u76EE\u524D DexClassFinder \u7684\u529F\u80FD\u5C1A\u5728\u8BD5\u9A8C\u9636\u6BB5\uFF0C\u7531\u4E8E\u4EC5\u901A\u8FC7 Java \u5C42\u5B9E\u73B0\u67E5\u627E\u529F\u80FD\uFF0C\u5728\u5F53\u524D APP Class \u8FC7\u591A\u65F6\u6027\u80FD\u53EF\u80FD\u4E0D\u80FD\u8FBE\u5230\u6700\u4F73\u6C34\u5E73\uFF0C\u5982\u679C\u53D1\u751F\u67E5\u627E\u4E0D\u5230\u3001\u5B9A\u4F4D\u6709\u8BEF\u7684\u95EE\u9898\u6B22\u8FCE\u5411\u6211\u4EEC\u53CD\u9988\u3002

    \u7531\u4E8E\u662F\u53CD\u5C04\u5C42\u9762\u7684 API\uFF0C\u76EE\u524D\u5B83\u53EA\u80FD\u901A\u8FC7\u7C7B\u4E0E\u6210\u5458\u7684\u7279\u5F81\u6765\u5B9A\u4F4D\u6307\u5B9A\u7684 Class\uFF0C\u4E0D\u80FD\u901A\u8FC7\u6307\u5B9A\u5B57\u8282\u7801\u4E2D\u7684\u5B57\u7B26\u4E32\u548C\u65B9\u6CD5\u5185\u5BB9\u7279\u5F81\u6765\u8FDB\u884C\u5B9A\u4F4D\u3002

    \u67E5\u627E Class \u7684\u901F\u5EA6\u53D6\u51B3\u4E8E\u5F53\u524D\u8BBE\u5907\u7684\u6027\u80FD\uFF0C\u76EE\u524D\u4E3B\u6D41\u7684\u79FB\u52A8\u7AEF\u5904\u7406\u5668\u5728 10~15w \u6570\u91CF\u7684 Class \u4E2D\u6761\u4EF6\u4E0D\u7B97\u590D\u6742\u7684\u60C5\u51B5\u4E0B\u5927\u6982\u5728 3~10s \u533A\u95F4\uFF0C\u6761\u4EF6\u7A0D\u5FAE\u590D\u6742\u7684\u60C5\u51B5\u4E0B\u6700\u5FEB\u901F\u5EA6\u80FD\u8FBE\u5230 25s \u4EE5\u5185\uFF0C\u5339\u914D\u5230\u7684\u540C\u7C7B\u578B Class \u8D8A\u591A\u901F\u5EA6\u8D8A\u6162\u3002

    ',3),C={class:"custom-container danger"},D=s("p",{class:"custom-container-title"},"\u7279\u522B\u6CE8\u610F",-1),B=s("p",null,[n("\u5728 "),s("strong",null,"YukiHookAPI"),n(" \u53D1\u5E03 2.x.x \u7248\u672C\u540E\uFF0C\u6B64\u529F\u80FD\u5C06\u88AB\u6807\u8BB0\u4E3A\u4F5C\u5E9F\uFF0C\u4E14\u5C06\u4F1A\u76F4\u63A5\u4ECE "),s("strong",null,"YukiReflection"),n(" \u4E2D\u79FB\u9664\u3002")],-1),m=n("\u6211\u4EEC\u6B22\u8FCE\u5404\u4F4D\u5F00\u53D1\u8005\u5F00\u59CB\u4F7F\u7528 "),b={href:"https://github.com/LuckyPray/DexKit",target:"_blank",rel:"noopener noreferrer"},F=n("DexKit"),g=n("\uFF0C\u5B83\u662F\u4E00\u4E2A\u4F7F\u7528 C++ \u5B9E\u73B0\u7684 "),k=s("strong",null,"Dex",-1),h=n(" \u9AD8\u6027\u80FD\u8FD0\u884C\u65F6\u89E3\u6790\u5E93\uFF0C\u5728\u6027\u80FD\u65B9\u9762\u6BD4 Java \u5C42\u66F4\u52A0\u9AD8\u6548\u4E0E\u4F18\u79C0\uFF0C\u76EE\u524D\u5C1A\u5728\u5F00\u53D1\u9636\u6BB5\uFF0C\u6B22\u8FCE\u63D0\u51FA\u5B9D\u8D35\u5EFA\u8BAE\u3002"),q=a(`

    \u5F00\u59CB\u4F7F\u7528

    \u4E0B\u9762\u662F\u4E00\u4E2A\u7B80\u5355\u7684\u7528\u6CD5\u793A\u4F8B\u3002

    \u5047\u8BBE\u4E0B\u9762\u8FD9\u4E2A Class \u662F\u6211\u4EEC\u60F3\u8981\u5F97\u5230\u7684\uFF0C\u5176\u4E2D\u7684\u540D\u79F0\u7ECF\u8FC7\u4E86\u6DF7\u6DC6\uFF0C\u5728\u6BCF\u4E2A\u7248\u672C\u53EF\u80FD\u90FD\u4E0D\u4E00\u6837\u3002

    \u793A\u4F8B\u5982\u4E0B

    package com.demo;
    -
    -public class a extends Activity implements Serializable {
    -
    -    public a(String var1) {
    -        // ...
    -    }
    -
    -    private String a;
    -
    -    private String b;
    -
    -    private boolean a;
    -
    -    protected void onCreate(Bundle var1) {
    -        // ...
    -    }
    -
    -    private static void a(String var1) {
    -        // ...
    -    }
    -
    -    private String a(boolean var1, String var2) {
    -        // ...
    -    }
    -
    -    private void a() {
    -        // ...
    -    }
    -
    -    public void a(boolean var1, a var2, b var3, String var4) {
    -        // ...
    -    }
    -}
    -

    \u6B64\u65F6\uFF0C\u6211\u4EEC\u60F3\u5F97\u5230\u8FD9\u4E2A Class\uFF0C\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 ClassLoader.searchClass \u65B9\u6CD5\u3002

    \u4E0B\u65B9\u6F14\u793A\u7684\u6761\u4EF6\u4E2D\u6BCF\u4E00\u4E2A\u90FD\u662F\u53EF\u9009\u7684\uFF0C\u6761\u4EF6\u8D8A\u590D\u6742\u5B9A\u4F4D\u8D8A\u7CBE\u786E\uFF0C\u540C\u65F6\u6027\u80FD\u4E5F\u4F1A\u8D8A\u5DEE\u3002

    \u793A\u4F8B\u5982\u4E0B

    searchClass {
    -    // \u4ECE\u6307\u5B9A\u7684\u5305\u540D\u8303\u56F4\u5F00\u59CB\u67E5\u627E\uFF0C\u5B9E\u9645\u4F7F\u7528\u65F6\uFF0C\u4F60\u53EF\u4EE5\u540C\u65F6\u6307\u5B9A\u591A\u4E2A\u5305\u540D\u8303\u56F4
    -    from("com.demo")
    -    // \u6307\u5B9A\u5F53\u524D Class \u7684 getSimpleName \u7684\u7ED3\u679C\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5\u5BF9\u8FD9\u4E2A\u5B57\u7B26\u4E32\u8FDB\u884C\u903B\u8F91\u5224\u65AD
    -    // \u8FD9\u91CC\u6211\u4EEC\u4E0D\u786E\u5B9A\u5B83\u7684\u540D\u79F0\u662F\u4E0D\u662F a\uFF0C\u53EF\u4EE5\u53EA\u5224\u65AD\u5B57\u7B26\u4E32\u957F\u5EA6
    -    simpleName { it.length == 1 }
    -    // \u6307\u5B9A\u7EE7\u627F\u7684\u7236\u7C7B\u5BF9\u8C61\uFF0C\u5982\u679C\u662F\u5B58\u5728\u7684 stub\uFF0C\u53EF\u4EE5\u76F4\u63A5\u7528\u6CDB\u578B\u8868\u793A
    -    extends<Activity>()
    -    // \u6307\u5B9A\u7EE7\u627F\u7684\u7236\u7C7B\u5BF9\u8C61\uFF0C\u53EF\u4EE5\u76F4\u63A5\u5199\u4E3A\u5B8C\u6574\u7C7B\u540D\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u540C\u65F6\u6307\u5B9A\u591A\u4E2A
    -    extends("android.app.Activity")
    -    // \u6307\u5B9A\u5B9E\u73B0\u7684\u63A5\u53E3\uFF0C\u5982\u679C\u662F\u5B58\u5728\u7684 stub\uFF0C\u53EF\u4EE5\u76F4\u63A5\u7528\u6CDB\u578B\u8868\u793A
    -    implements<Serializable>()
    -    // \u6307\u5B9A\u5B9E\u73B0\u7684\u63A5\u53E3\uFF0C\u53EF\u4EE5\u76F4\u63A5\u5199\u4E3A\u5B8C\u6574\u7C7B\u540D\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u540C\u65F6\u6307\u5B9A\u591A\u4E2A
    -    implements("java.io.Serializable")
    -    // \u6307\u5B9A\u6784\u9020\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    constructor { param(StringClass) }.count(num = 1)
    -    // \u6307\u5B9A\u53D8\u91CF\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    field { type = StringClass }.count(num = 2)
    -    // \u6307\u5B9A\u53D8\u91CF\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    field { type = BooleanType }.count(num = 1)
    -    // \u76F4\u63A5\u6307\u5B9A\u6240\u6709\u53D8\u91CF\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    field().count(num = 3)
    -    // \u5982\u679C\u4F60\u8BA4\u4E3A\u53D8\u91CF\u7684\u4E2A\u6570\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8FD8\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u81EA\u5B9A\u4E49\u6761\u4EF6
    -    field().count(1..3)
    -    field().count { it >= 3 }
    -    // \u6307\u5B9A\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method {
    -        name = "onCreate"
    -        param(BundleClass)
    -    }.count(num = 1)
    -    // \u6307\u5B9A\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u540C\u65F6\u6307\u5B9A\u4FEE\u9970\u7B26\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method {
    -        modifiers { isStatic && isPrivate }
    -        param(StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // \u6307\u5B9A\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u540C\u65F6\u6307\u5B9A\u4FEE\u9970\u7B26\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, StringClass)
    -        returnType = StringClass
    -    }.count(num = 1)
    -    // \u6307\u5B9A\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u540C\u65F6\u6307\u5B9A\u4FEE\u9970\u7B26\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        emptyParam()
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // \u6307\u5B9A\u65B9\u6CD5\u7684\u7C7B\u578B\u4E0E\u6837\u5F0F\uFF0C\u540C\u65F6\u6307\u5B9A\u4FEE\u9970\u7B26\u548C\u6A21\u7CCA\u7C7B\u578B VagueType\uFF0C\u4EE5\u53CA\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, VagueType, VagueType, StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // \u76F4\u63A5\u6307\u5B9A\u6240\u6709\u65B9\u6CD5\u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    method().count(num = 5)
    -    // \u5982\u679C\u4F60\u8BA4\u4E3A\u65B9\u6CD5\u7684\u4E2A\u6570\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8FD8\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u81EA\u5B9A\u4E49\u6761\u4EF6
    -    method().count(1..5)
    -    method().count { it >= 5 }
    -    // \u76F4\u63A5\u6307\u5B9A\u6240\u6709\u6210\u5458 (Member) \u5728\u5F53\u524D\u7C7B\u4E2D\u5B58\u5728\u7684\u4E2A\u6570 count
    -    // \u6210\u5458\u5305\u62EC\uFF1AField (\u53D8\u91CF)\u3001Method (\u65B9\u6CD5)\u3001Constructor (\u6784\u9020\u65B9\u6CD5)
    -    member().count(num = 9)
    -    // \u6240\u6709\u6210\u5458\u4E2D\u4E00\u5B9A\u5B58\u5728\u4E00\u4E2A static \u4FEE\u9970\u7B26\uFF0C\u53EF\u4EE5\u8FD9\u6837\u52A0\u5165\u6B64\u6761\u4EF6
    -    member {
    -        modifiers { isStatic }
    -    }
    -}.get() // \u5F97\u5230\u8FD9\u4E2A Class \u672C\u8EAB\u7684\u5B9E\u4F8B\uFF0C\u627E\u4E0D\u5230\u4F1A\u8FD4\u56DE null
    -

    \u5C0F\u63D0\u793A

    \u4E0A\u8FF0\u7528\u6CD5\u4E2D\u5BF9\u4E8E Field\u3001Method\u3001Constructor \u7684\u6761\u4EF6\u7528\u6CD5\u4E0E Member \u6269\u5C55 \u4E2D\u7684\u76F8\u5173\u7528\u6CD5\u662F\u4E00\u81F4\u7684\uFF0C\u4EC5\u6709\u5C0F\u90E8\u5206\u533A\u522B\u3002

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 MemberRules\u3001FieldRules\u3001MethodRules\u3001ConstructorRules\u3002

    \u5F02\u6B65\u67E5\u627E

    \u9ED8\u8BA4\u60C5\u51B5\u4E0B DexClassFinder \u4F1A\u4F7F\u7528\u540C\u6B65\u65B9\u5F0F\u67E5\u627E Class\uFF0C\u4F1A\u963B\u585E\u5F53\u524D\u7EBF\u7A0B\u76F4\u5230\u627E\u5230\u6216\u627E\u4E0D\u5230\u53D1\u751F\u5F02\u5E38\u4E3A\u6B62\uFF0C\u82E5\u67E5\u627E\u6D88\u8017\u7684\u65F6\u95F4\u8FC7\u957F\uFF0C\u53EF\u80FD\u4F1A\u5BFC\u81F4\u5F53\u524D APP \u53D1\u751F ANR \u95EE\u9898\u3002

    \u9488\u5BF9\u4E0A\u8FF0\u95EE\u9898\uFF0C\u6211\u4EEC\u53EF\u4EE5\u542F\u7528\u5F02\u6B65\uFF0C\u53EA\u9700\u8981\u52A0\u5165\u53C2\u6570 async = true\uFF0C\u8FD9\u5C06\u4E0D\u9700\u8981\u4F60\u518D\u6B21\u542F\u52A8\u4E00\u4E2A\u7EBF\u7A0B\uFF0CAPI \u5DF2\u5E2E\u4F60\u5904\u7406\u597D\u76F8\u5173\u95EE\u9898\u3002

    \u6CE8\u610F

    \u82E5\u8981\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u4F60\u9700\u8981\u5728\u65B9\u6CD5\u53C2\u6570\u9996\u4F4D\u4F20\u5165\u5F53\u524D APP \u7684 Context\u3002

    \u5BF9\u4E8E\u5F02\u6B65\u60C5\u51B5\u4E0B\u4F60\u9700\u8981\u4F7F\u7528 wait \u65B9\u6CD5\u6765\u5F97\u5230\u7ED3\u679C\uFF0Cget \u65B9\u6CD5\u5C06\u4E0D\u518D\u8D77\u4F5C\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    val context: Context // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D APP \u7684 Context
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class1 ->
    -    // \u5F97\u5230\u5F02\u6B65\u7ED3\u679C
    -}
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class2 ->
    -    // \u5F97\u5230\u5F02\u6B65\u7ED3\u679C
    -}
    -

    \u8FD9\u6837\u6211\u4EEC\u7684\u67E5\u627E\u8FC7\u7A0B\u5C31\u662F\u5F02\u6B65\u8FD0\u884C\u4E86\uFF0C\u5B83\u5C06\u4E0D\u4F1A\u963B\u585E\u4E3B\u7EBF\u7A0B\uFF0C\u6BCF\u4E2A\u67E5\u627E\u90FD\u5C06\u5728\u5355\u72EC\u7684\u7EBF\u7A0B\u540C\u65F6\u8FDB\u884C\uFF0C\u53EF\u8FBE\u5230\u5E76\u884C\u4EFB\u52A1\u7684\u6548\u679C\u3002

    \u672C\u5730\u7F13\u5B58

    \u7531\u4E8E\u6BCF\u6B21\u91CD\u65B0\u6253\u5F00\u5F53\u524D APP \u90FD\u4F1A\u91CD\u65B0\u8FDB\u884C\u67E5\u627E\uFF0C\u5728\u5F53\u524D APP \u7248\u672C\u4E0D\u53D8\u7684\u60C5\u51B5\u4E0B\u8FD9\u662F\u4E00\u79CD\u91CD\u590D\u6027\u80FD\u6D6A\u8D39\u3002

    \u6B64\u65F6\u6211\u4EEC\u53EF\u4EE5\u901A\u8FC7\u6307\u5B9A name \u53C2\u6570\u6765\u5BF9\u5F53\u524D APP \u7248\u672C\u7684\u67E5\u627E\u7ED3\u679C\u8FDB\u884C\u672C\u5730\u7F13\u5B58\uFF0C\u4E0B\u4E00\u6B21\u5C06\u76F4\u63A5\u4ECE\u672C\u5730\u7F13\u5B58\u4E2D\u8BFB\u53D6\u67E5\u627E\u5230\u7684\u7C7B\u540D\u3002

    \u672C\u5730\u7F13\u5B58\u4F7F\u7528\u7684\u662F SharedPreferences\uFF0C\u5B83\u5C06\u88AB\u4FDD\u5B58\u5230\u5F53\u524D APP \u7684\u6570\u636E\u76EE\u5F55\u4E2D\uFF0C\u5728\u5F53\u524D APP \u7248\u672C\u66F4\u65B0\u540E\u4F1A\u91CD\u65B0\u8FDB\u884C\u7F13\u5B58\u3002

    \u542F\u7528\u672C\u5730\u7F13\u5B58\u540E\uFF0C\u5C06\u540C\u65F6\u8BBE\u7F6E async = true\uFF0C\u4F60\u53EF\u4EE5\u4E0D\u9700\u8981\u518D\u624B\u52A8\u8FDB\u884C\u8BBE\u7F6E\u3002

    \u6CE8\u610F

    \u82E5\u8981\u4F7F\u7528\u6B64\u529F\u80FD\uFF0C\u4F60\u9700\u8981\u5728\u65B9\u6CD5\u53C2\u6570\u9996\u4F4D\u4F20\u5165\u5F53\u524D APP \u7684 Context\u3002

    \u793A\u4F8B\u5982\u4E0B

    val context: Context // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D APP \u7684 Context
    -searchClass(context, name = "com.demo.class1") {
    -    // ...
    -}.wait { class1 ->
    -    // \u5F97\u5230\u5F02\u6B65\u7ED3\u679C
    -}
    -searchClass(context, name = "com.demo.class2") {
    -    // ...
    -}.wait { class2 ->
    -    // \u5F97\u5230\u5F02\u6B65\u7ED3\u679C
    -}
    -

    \u5982\u679C\u4F60\u60F3\u624B\u52A8\u6E05\u9664\u672C\u5730\u7F13\u5B58\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u6CD5\u6E05\u9664\u5F53\u524D APP \u7248\u672C\u7684\u7F13\u5B58\u3002

    \u793A\u4F8B\u5982\u4E0B

    val context: Context // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D APP \u7684 Context
    -DexClassFinder.clearCache(context)
    -

    \u4F60\u8FD8\u53EF\u4EE5\u6E05\u9664\u6307\u5B9A\u7248\u672C\u7684 APP \u7F13\u5B58\u3002

    \u793A\u4F8B\u5982\u4E0B

    val context: Context // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D APP \u7684 Context
    -DexClassFinder.clearCache(context, versionName = "1.0", versionCode = 1)
    -

    \u591A\u91CD\u67E5\u627E

    \u5982\u679C\u4F60\u9700\u8981\u4F7F\u7528\u56FA\u5B9A\u7684\u6761\u4EF6\u540C\u65F6\u67E5\u627E\u4E00\u7EC4 Class\uFF0C\u90A3\u4E48\u4F60\u53EA\u9700\u8981\u4F7F\u7528 all \u6216 waitAll \u65B9\u6CD5\u6765\u5F97\u5230\u7ED3\u679C\u3002

    // \u540C\u6B65\u67E5\u627E\uFF0C\u4F7F\u7528 all \u5F97\u5230\u6761\u4EF6\u5168\u90E8\u67E5\u627E\u5230\u7684\u7ED3\u679C
    -searchClass {
    -    // ...
    -}.all().forEach { clazz ->
    -    // \u5F97\u5230\u6BCF\u4E2A\u7ED3\u679C
    -}
    -// \u540C\u6B65\u67E5\u627E\uFF0C\u4F7F\u7528 all { ... } \u904D\u5386\u6BCF\u4E2A\u7ED3\u679C
    -searchClass {
    -    // ...
    -}.all { clazz ->
    -    // \u5F97\u5230\u6BCF\u4E2A\u7ED3\u679C
    -}
    -// \u5F02\u6B65\u67E5\u627E\uFF0C\u4F7F\u7528 waitAll \u5F97\u5230\u6761\u4EF6\u5168\u90E8\u67E5\u627E\u5230\u7684\u7ED3\u679C
    -val context: Context // \u5047\u8BBE\u8FD9\u5C31\u662F\u5F53\u524D APP \u7684 Context
    -searchClass(context, async = true) {
    -    // ...
    -}.waitAll { classes ->
    -    classes.forEach {
    -        // \u5F97\u5230\u6BCF\u4E2A\u7ED3\u679C
    -    }
    -}
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 ClassLoader.searchClass \u65B9\u6CD5\u3002

    Member \u6269\u5C55

    \u8FD9\u91CC\u662F Class \u5B57\u8282\u7801\u6210\u5458\u53D8\u91CF Field\u3001Method\u3001Constructor \u76F8\u5173\u7684\u6269\u5C55\u529F\u80FD\u3002

    \u5C0F\u63D0\u793A

    Member \u662F Field\u3001Method\u3001Constructor \u7684\u63A5\u53E3\u63CF\u8FF0\u5BF9\u8C61\uFF0C\u5B83\u5728 Java \u53CD\u5C04\u4E2D\u4E3A Class \u4E2D\u5B57\u8282\u7801\u6210\u5458\u7684\u603B\u79F0\u3002

    \u5047\u8BBE\u6709\u4E00\u4E2A\u8FD9\u6837\u7684 Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    package com.demo;
    -
    -public class BaseTest {
    -
    -    public BaseTest() {
    -        // ...
    -    }
    -
    -    public BaseTest(boolean isInit) {
    -        // ...
    -    }
    -
    -    private void doBaseTask(String taskName) {
    -        // ...
    -    }
    -}
    -
    package com.demo;
    -
    -public class Test extends BaseTest {
    -
    -    public Test() {
    -        // ...
    -    }
    -
    -    public Test(boolean isInit) {
    -        // ...
    -    }
    -
    -    private static TAG = "Test";
    -
    -    private BaseTest baseInstance;
    -
    -    private String a;
    -
    -    private boolean a;
    -
    -    private boolean isTaskRunning = false;
    -
    -    private static void init() {
    -        // ...
    -    }
    -
    -    private void doTask(String taskName) {
    -        // ...
    -    }
    -
    -    private void release(String taskName, Function<boolean, String> task, boolean isFinish) {
    -        // ...
    -    }
    -
    -    private void stop() {
    -        // ...
    -    }
    -
    -    private String getName() {
    -        // ...
    -    }
    -
    -    private void b() {
    -        // ...
    -    }
    -
    -    private void b(String a) {
    -        // ...
    -    }
    -}
    -

    \u67E5\u627E\u4E0E\u53CD\u5C04\u8C03\u7528

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230 Test(\u4EE5\u4E0B\u7EDF\u79F0\u201C\u5F53\u524D Class\u201D)\u7684 doTask \u65B9\u6CD5\u5E76\u6267\u884C\uFF0C\u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u53BB\u67E5\u627E\u8FD9\u4E2A\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528\u53CD\u5C04 API \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java
    -    .getDeclaredMethod("doTask", String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(instance, "task_name")
    -

    \u8FD9\u79CD\u5199\u6CD5\u5927\u6982\u4E0D\u662F\u5F88\u53CB\u597D\uFF0C\u6B64\u65F6 YukiReflection \u5C31\u4E3A\u4F60\u63D0\u4F9B\u4E86\u4E00\u4E2A\u53EF\u5728\u4EFB\u610F\u5730\u65B9\u4F7F\u7528\u7684\u8BED\u6CD5\u7CD6\u3002

    \u4EE5\u4E0A\u5199\u6CD5\u6362\u505A YukiReflection \u53EF\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "doTask"
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 MethodFinder\u3002

    \u540C\u6837\u5730\uFF0C\u6211\u4EEC\u9700\u8981\u5F97\u5230 isTaskRunning \u53D8\u91CF\u4E5F\u53EF\u4EE5\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.field {
    -    name = "isTaskRunning"
    -    type = BooleanType
    -}.get(instance).any() // any \u4E3A Field \u7684\u4EFB\u610F\u7C7B\u578B\u5B9E\u4F8B\u5316\u5BF9\u8C61
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 FieldFinder\u3002

    \u4E5F\u8BB8\u4F60\u8FD8\u60F3\u5F97\u5230\u5F53\u524D Class \u7684\u6784\u9020\u65B9\u6CD5\uFF0C\u540C\u6837\u53EF\u4EE5\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.constructor {
    -    param(BooleanType)
    -}.get().call(true) // \u53EF\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u5B9E\u4F8B
    -

    \u82E5\u60F3\u5F97\u5230\u7684\u662F Class \u7684\u65E0\u53C2\u6784\u9020\u65B9\u6CD5\uFF0C\u53EF\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.constructor().get().call() // \u53EF\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u5B9E\u4F8B
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 ConstructorFinder\u3002

    \u53EF\u9009\u7684\u67E5\u627E\u6761\u4EF6

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230 Class \u4E2D\u7684 getName \u65B9\u6CD5\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -    returnType = StringClass
    -}.get(instance).string() // \u5F97\u5230\u65B9\u6CD5\u7684\u7ED3\u679C
    -

    \u901A\u8FC7\u89C2\u5BDF\u53D1\u73B0\uFF0C\u8FD9\u4E2A Class \u4E2D\u53EA\u6709\u4E00\u4E2A\u540D\u4E3A getName \u7684\u65B9\u6CD5\uFF0C\u90A3\u6211\u4EEC\u53EF\u4E0D\u53EF\u4EE5\u518D\u7B80\u5355\u4E00\u70B9\u5462\uFF1F

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -}.get(instance).string() // \u5F97\u5230\u65B9\u6CD5\u7684\u7ED3\u679C
    -

    \u662F\u7684\uFF0C\u5BF9\u4E8E\u786E\u5207\u4E0D\u4F1A\u53D8\u5316\u7684\u65B9\u6CD5\uFF0C\u4F60\u53EF\u4EE5\u7CBE\u7B80\u67E5\u627E\u6761\u4EF6\u3002

    \u5728\u53EA\u4F7F\u7528 get \u6216 wait \u65B9\u6CD5\u5F97\u5230\u7ED3\u679C\u65F6 YukiReflection \u4F1A\u9ED8\u8BA4\u6309\u7167\u5B57\u8282\u7801\u987A\u5E8F\u5339\u914D\u7B2C\u4E00\u4E2A\u67E5\u627E\u5230\u7684\u7ED3\u679C\u3002

    \u95EE\u9898\u53C8\u6765\u4E86\uFF0C\u8FD9\u4E2A Class \u4E2D\u6709\u4E00\u4E2A release \u65B9\u6CD5\uFF0C\u4F46\u662F\u5B83\u7684\u65B9\u6CD5\u53C2\u6570\u5F88\u957F\uFF0C\u800C\u4E14\u90E8\u5206\u7C7B\u578B\u53EF\u80FD\u65E0\u6CD5\u76F4\u63A5\u5F97\u5230\u3002

    \u901A\u5E38\u60C5\u51B5\u4E0B\u6211\u4EEC\u4F1A\u4F7F\u7528 param(...) \u6765\u67E5\u627E\u8FD9\u4E2A\u65B9\u6CD5\uFF0C\u4F46\u662F\u6709\u6CA1\u6709\u66F4\u7B80\u5355\u7684\u65B9\u6CD5\u5462\u3002

    \u6B64\u65F6\uFF0C\u5728\u786E\u5B9A\u65B9\u6CD5\u552F\u4E00\u6027\u540E\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 paramCount \u6765\u67E5\u627E\u5230\u8FD9\u4E2A\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "release"
    -    // \u6B64\u65F6\u6211\u4EEC\u4E0D\u5FC5\u786E\u5B9A\u65B9\u6CD5\u53C2\u6570\u5177\u4F53\u7C7B\u578B\uFF0C\u5199\u4E2A\u6570\u5C31\u597D
    -    paramCount = 3
    -}.get(instance) // \u5F97\u5230\u8FD9\u4E2A\u65B9\u6CD5
    -

    \u4E0A\u8FF0\u793A\u4F8B\u867D\u7136\u80FD\u591F\u5339\u914D\u6210\u529F\uFF0C\u4F46\u662F\u4E0D\u7CBE\u786E\uFF0C\u6B64\u65F6\u4F60\u8FD8\u53EF\u4EE5\u4F7F\u7528 VagueType \u6765\u586B\u5145\u4F60\u4E0D\u60F3\u586B\u5199\u7684\u65B9\u6CD5\u53C2\u6570\u7C7B\u578B\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "release"
    -    // \u4F7F\u7528 VagueType \u6765\u586B\u5145\u4E0D\u60F3\u586B\u5199\u7684\u7C7B\u578B\uFF0C\u540C\u65F6\u4FDD\u8BC1\u5176\u5B83\u7C7B\u578B\u80FD\u591F\u5339\u914D
    -    param(StringClass, VagueType, BooleanType)
    -}.get(instance) // \u5F97\u5230\u8FD9\u4E2A\u65B9\u6CD5
    -

    \u5982\u679C\u4F60\u5E76\u4E0D\u786E\u5B9A\u6BCF\u4E00\u4E2A\u53C2\u6570\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u901A\u8FC7 param { ... } \u65B9\u6CD5\u6765\u521B\u5EFA\u4E00\u4E2A\u6761\u4EF6\u65B9\u6CD5\u4F53\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "release"
    -    // \u5F97\u5230 it (Class) \u65B9\u6CD5\u53C2\u6570\u7C7B\u578B\u6570\u7EC4\u5B9E\u4F8B\u6765\u4EC5\u5224\u65AD\u5DF2\u77E5\u7684\u7C7B\u578B\u548C\u5B83\u7684\u4F4D\u7F6E
    -    param { it[0] == StringClass && it[2] == BooleanType }
    -}.get(instance) // \u5F97\u5230\u8FD9\u4E2A\u65B9\u6CD5
    -

    \u5C0F\u63D0\u793A

    \u4F7F\u7528 param { ... } \u521B\u5EFA\u4E00\u4E2A\u6761\u4EF6\u65B9\u6CD5\u4F53\uFF0C\u5176\u4E2D\u7684\u53D8\u91CF it \u5373\u5F53\u524D\u65B9\u6CD5\u53C2\u6570\u7684 Class \u7C7B\u578B\u6570\u7EC4\u5B9E\u4F8B\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u81EA\u7531\u4F7F\u7528 Class \u4E2D\u7684\u6240\u6709\u5BF9\u8C61\u53CA\u5176\u65B9\u6CD5\u3002

    \u65B9\u6CD5\u4F53\u672B\u5C3E\u6761\u4EF6\u9700\u8981\u8FD4\u56DE\u4E00\u4E2A Boolean\uFF0C\u5373\u6700\u7EC8\u7684\u6761\u4EF6\u5224\u65AD\u7ED3\u679C\u3002

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 FieldFinder.type\u3001MethodFinder.param\u3001MethodFinder.returnType\u3001ConstructorFinder.param \u65B9\u6CD5\u3002

    \u5728\u7236\u7C7B\u67E5\u627E

    \u4F60\u4F1A\u6CE8\u610F\u5230 Test \u7EE7\u627F\u4E8E BaseTest\uFF0C\u73B0\u5728\u6211\u4EEC\u60F3\u5F97\u5230 BaseTest \u7684 doBaseTask \u65B9\u6CD5\uFF0C\u5728\u4E0D\u77E5\u9053\u7236\u7C7B\u540D\u79F0\u7684\u60C5\u51B5\u4E0B\uFF0C\u8981\u600E\u4E48\u505A\u5462\uFF1F

    \u53C2\u7167\u4E0A\u9762\u7684\u67E5\u627E\u6761\u4EF6\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u5728\u67E5\u627E\u6761\u4EF6\u4E2D\u52A0\u5165\u4E00\u4E2A superClass \u5373\u53EF\u5B9E\u73B0\u8FD9\u4E2A\u529F\u80FD\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // \u53EA\u9700\u8981\u6DFB\u52A0\u8FD9\u4E2A\u6761\u4EF6
    -    superClass()
    -}.get(instance).call("task_name")
    -

    \u8FD9\u4E2A\u65F6\u5019\u6211\u4EEC\u5C31\u53EF\u4EE5\u5728\u7236\u7C7B\u4E2D\u53D6\u5230\u8FD9\u4E2A\u65B9\u6CD5\u4E86\u3002

    superClass \u6709\u4E00\u4E2A\u53C2\u6570\u4E3A isOnlySuperClass\uFF0C\u8BBE\u7F6E\u4E3A true \u540E\uFF0C\u53EF\u4EE5\u8DF3\u8FC7\u5F53\u524D Class \u4EC5\u67E5\u627E\u5F53\u524D Class \u7684\u7236\u7C7B\u3002

    \u7531\u4E8E\u6211\u4EEC\u73B0\u5728\u5DF2\u77E5 doBaseTask \u65B9\u6CD5\u53EA\u5B58\u5728\u4E8E\u7236\u7C7B\uFF0C\u53EF\u4EE5\u52A0\u4E0A\u8FD9\u4E2A\u6761\u4EF6\u8282\u7701\u67E5\u627E\u65F6\u95F4\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // \u52A0\u5165\u4E00\u4E2A\u67E5\u627E\u6761\u4EF6
    -    superClass(isOnlySuperClass = true)
    -}.get(instance).call("task_name")
    -

    \u8FD9\u4E2A\u65F6\u5019\u6211\u4EEC\u540C\u6837\u53EF\u4EE5\u5F97\u5230\u7236\u7C7B\u4E2D\u7684\u8FD9\u4E2A\u65B9\u6CD5\u3002

    superClass \u4E00\u65E6\u8BBE\u7F6E\u5C31\u4F1A\u81EA\u52A8\u5FAA\u73AF\u5411\u540E\u67E5\u627E\u5168\u90E8\u7EE7\u627F\u7684\u7236\u7C7B\u4E2D\u662F\u5426\u6709\u8FD9\u4E2A\u65B9\u6CD5\uFF0C\u76F4\u5230\u67E5\u627E\u5230\u76EE\u6807\u6CA1\u6709\u7236\u7C7B(\u7EE7\u627F\u5173\u7CFB\u4E3A java.lang.Object)\u4E3A\u6B62\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 MethodFinder.superClass\u3001ConstructorFinder.superClass\u3001FieldFinder.superClass \u65B9\u6CD5\u3002

    \u7279\u522B\u6CE8\u610F

    \u5F53\u524D\u67E5\u627E\u7684 Method \u9664\u975E\u6307\u5B9A superClass \u6761\u4EF6\uFF0C\u5426\u5219\u53EA\u80FD\u67E5\u627E\u5230\u5F53\u524D Class \u7684 Method\uFF0C\u8FD9\u662F Java \u53CD\u5C04 API \u7684\u9ED8\u8BA4\u884C\u4E3A\u3002

    \u6A21\u7CCA\u67E5\u627E

    \u5982\u679C\u6211\u4EEC\u60F3\u67E5\u627E\u4E00\u4E2A\u65B9\u6CD5\u540D\u79F0\uFF0C\u4F46\u662F\u53C8\u4E0D\u786E\u5B9A\u5B83\u5728\u6BCF\u4E2A\u7248\u672C\u4E2D\u662F\u5426\u53D1\u751F\u53D8\u5316\uFF0C\u6B64\u65F6\u6211\u4EEC\u5C31\u53EF\u4EE5\u4F7F\u7528\u6A21\u7CCA\u67E5\u627E\u529F\u80FD\u3002

    \u5047\u8BBE\u6211\u4EEC\u8981\u5F97\u5230 Class \u4E2D\u7684 doTask \u65B9\u6CD5\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name {
    -        // \u8BBE\u7F6E\u540D\u79F0\u4E0D\u533A\u5206\u5927\u5C0F\u5199
    -        it.equals("dotask", isIgnoreCase = true)
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    \u5DF2\u77E5\u5F53\u524D Class \u4E2D\u4EC5\u6709\u4E00\u4E2A doTask \u65B9\u6CD5\uFF0C\u6211\u4EEC\u8FD8\u53EF\u4EE5\u5224\u65AD\u65B9\u6CD5\u540D\u79F0\u4EC5\u5305\u542B\u5176\u4E2D\u6307\u5B9A\u7684\u5B57\u7B26\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name {
    -        // \u4EC5\u5305\u542B oTas
    -        it.contains("oTas")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    \u6211\u4EEC\u8FD8\u53EF\u4EE5\u6839\u636E\u9996\u5C3E\u5B57\u7B26\u4E32\u8FDB\u884C\u5224\u65AD\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name {
    -        // \u5F00\u5934\u5305\u542B do\uFF0C\u7ED3\u5C3E\u5305\u542B Task
    -        it.startsWith("do") && it.endsWith("Task")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    \u901A\u8FC7\u89C2\u5BDF\u53D1\u73B0\u8FD9\u4E2A\u65B9\u6CD5\u540D\u79F0\u4E2D\u53EA\u5305\u542B\u5B57\u6BCD\uFF0C\u6211\u4EEC\u8FD8\u53EF\u4EE5\u518D\u589E\u52A0\u4E00\u4E2A\u7CBE\u786E\u7684\u67E5\u627E\u6761\u4EF6\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name {
    -        // \u5F00\u5934\u5305\u542B do\uFF0C\u7ED3\u5C3E\u5305\u542B Task\uFF0C\u4EC5\u5305\u542B\u5B57\u6BCD
    -        it.startsWith("do") && it.endsWith("Task") && it.isOnlyLetters()
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    \u5C0F\u63D0\u793A

    \u4F7F\u7528 name { ... } \u521B\u5EFA\u4E00\u4E2A\u6761\u4EF6\u65B9\u6CD5\u4F53\uFF0C\u5176\u4E2D\u7684\u53D8\u91CF it \u5373\u5F53\u524D\u540D\u79F0\u7684\u5B57\u7B26\u4E32\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u5728 NameRules \u7684\u6269\u5C55\u65B9\u6CD5\u4E2D\u81EA\u7531\u4F7F\u7528\u5176\u4E2D\u7684\u529F\u80FD\u3002

    \u65B9\u6CD5\u4F53\u672B\u5C3E\u6761\u4EF6\u9700\u8981\u8FD4\u56DE\u4E00\u4E2A Boolean\uFF0C\u5373\u6700\u7EC8\u7684\u6761\u4EF6\u5224\u65AD\u7ED3\u679C\u3002

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 FieldFinder.name\u3001MethodFinder.name \u65B9\u6CD5\u4EE5\u53CA NameRules\u3002

    \u591A\u91CD\u67E5\u627E

    \u6709\u4E9B\u65F6\u5019\uFF0C\u6211\u4EEC\u53EF\u80FD\u9700\u8981\u67E5\u627E\u4E00\u4E2A Class \u4E2D\u5177\u6709\u76F8\u540C\u7279\u5F81\u7684\u4E00\u7EC4\u65B9\u6CD5\u3001\u6784\u9020\u65B9\u6CD5\u3001\u53D8\u91CF\uFF0C\u6B64\u65F6\uFF0C\u6211\u4EEC\u5C31\u53EF\u4EE5\u5229\u7528\u76F8\u5BF9\u6761\u4EF6\u5339\u914D\u6765\u5B8C\u6210\u3002

    \u5728\u67E5\u627E\u6761\u4EF6\u7ED3\u679C\u7684\u57FA\u7840\u4E0A\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u628A get \u6362\u4E3A all \u5373\u53EF\u5F97\u5230\u5339\u914D\u6761\u4EF6\u7684\u5168\u90E8\u5B57\u8282\u7801\u3002

    \u5047\u8BBE\u8FD9\u6B21\u6211\u4EEC\u8981\u5F97\u5230 Class \u4E2D\u65B9\u6CD5\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u5728 1..3 \u7684\u5168\u90E8\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    paramCount(1..3)
    -}.all(instance).forEach { instance ->
    -    // \u8C03\u7528\u6267\u884C\u6BCF\u4E2A\u65B9\u6CD5
    -    instance.call(...)
    -}
    -

    \u4E0A\u8FF0\u793A\u4F8B\u53EF\u5B8C\u7F8E\u5339\u914D\u5230\u5982\u4E0B 3 \u4E2A\u65B9\u6CD5\u3002

    private void doTask(String taskName)

    private void release(String taskName, Function<boolean, String> task, boolean isFinish)

    private void b(String a)

    \u5982\u679C\u4F60\u60F3\u66F4\u52A0\u81EA\u7531\u5730\u5B9A\u4E49\u53C2\u6570\u4E2A\u6570\u8303\u56F4\u7684\u6761\u4EF6\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    paramCount { it < 3 }
    -}.all(instance).forEach { instance ->
    -    // \u8C03\u7528\u6267\u884C\u6BCF\u4E2A\u65B9\u6CD5
    -    instance.call(...)
    -}
    -

    \u4E0A\u8FF0\u793A\u4F8B\u53EF\u5B8C\u7F8E\u5339\u914D\u5230\u5982\u4E0B 6 \u4E2A\u65B9\u6CD5\u3002

    private static void init()

    private void doTask(String taskName)

    private void stop(String a)

    private void getName(String a)

    private void b()

    private void b(String a)

    \u901A\u8FC7\u89C2\u5BDF Class \u4E2D\u6709\u4E24\u4E2A\u540D\u79F0\u4E3A b \u7684\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "b"
    -}.all(instance).forEach { instance ->
    -    // \u8C03\u7528\u6267\u884C\u6BCF\u4E2A\u65B9\u6CD5
    -    instance.call(...)
    -}
    -

    \u4E0A\u8FF0\u793A\u4F8B\u53EF\u5B8C\u7F8E\u5339\u914D\u5230\u5982\u4E0B 2 \u4E2A\u65B9\u6CD5\u3002

    private void b()

    private void b(String a)

    \u5C0F\u63D0\u793A

    \u4F7F\u7528 paramCount { ... } \u521B\u5EFA\u4E00\u4E2A\u6761\u4EF6\u65B9\u6CD5\u4F53\uFF0C\u5176\u4E2D\u7684\u53D8\u91CF it \u5373\u5F53\u524D\u53C2\u6570\u4E2A\u6570\u7684\u6574\u6570\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u5728 CountRules \u7684\u6269\u5C55\u65B9\u6CD5\u4E2D\u81EA\u7531\u4F7F\u7528\u5176\u4E2D\u7684\u529F\u80FD\u3002

    \u65B9\u6CD5\u4F53\u672B\u5C3E\u6761\u4EF6\u9700\u8981\u8FD4\u56DE\u4E00\u4E2A Boolean\uFF0C\u5373\u6700\u7EC8\u7684\u6761\u4EF6\u5224\u65AD\u7ED3\u679C\u3002

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 MethodFinder.paramCount\u3001ConstructorFinder.paramCount \u65B9\u6CD5\u4EE5\u53CA CountRules\u3002

    \u9759\u6001\u5B57\u8282\u7801

    \u6709\u4E9B\u65B9\u6CD5\u548C\u53D8\u91CF\u5728 Class \u4E2D\u662F\u9759\u6001\u7684\u5B9E\u73B0\uFF0C\u8FD9\u4E2A\u65F6\u5019\uFF0C\u6211\u4EEC\u4E0D\u9700\u8981\u4F20\u5165\u5B9E\u4F8B\u5C31\u53EF\u4EE5\u8C03\u7528\u5B83\u4EEC\u3002

    \u5047\u8BBE\u6211\u4EEC\u8FD9\u6B21\u8981\u5F97\u5230\u9759\u6001\u53D8\u91CF TAG \u7684\u5185\u5BB9\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -}.get().string() // Field \u7684\u7C7B\u578B\u662F\u5B57\u7B26\u4E32\uFF0C\u53EF\u76F4\u63A5\u8FDB\u884C cast
    -

    \u5047\u8BBE Class \u4E2D\u5B58\u5728\u540C\u540D\u7684\u975E\u9759\u6001 TAG \u53D8\u91CF\uFF0C\u8FD9\u4E2A\u65F6\u5019\u600E\u4E48\u529E\u5462\uFF1F

    \u52A0\u5165\u4E00\u4E2A\u7B5B\u9009\u6761\u4EF6\u5373\u53EF\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -    // \u6807\u8BC6\u67E5\u627E\u7684\u8FD9\u4E2A\u53D8\u91CF\u9700\u8981\u662F\u9759\u6001
    -    modifiers { isStatic }
    -}.get().string() // Field \u7684\u7C7B\u578B\u662F\u5B57\u7B26\u4E32\uFF0C\u53EF\u76F4\u63A5\u8FDB\u884C cast
    -

    \u6211\u4EEC\u8FD8\u53EF\u4EE5\u8C03\u7528\u540D\u4E3A init \u7684\u9759\u6001\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -}.get().call()
    -

    \u540C\u6837\u5730\uFF0C\u4F60\u53EF\u4EE5\u6807\u8BC6\u5B83\u662F\u4E00\u4E2A\u9759\u6001\u3002

    \u793A\u4F8B\u5982\u4E0B

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -    // \u6807\u8BC6\u67E5\u627E\u7684\u8FD9\u4E2A\u65B9\u6CD5\u9700\u8981\u662F\u9759\u6001
    -    modifiers { isStatic }
    -}.get().call()
    -

    \u5C0F\u63D0\u793A

    \u4F7F\u7528 modifiers { ... } \u521B\u5EFA\u4E00\u4E2A\u6761\u4EF6\u65B9\u6CD5\u4F53\uFF0C\u6B64\u65F6\u4F60\u5C31\u53EF\u4EE5\u5728 ModifierRules \u4E2D\u81EA\u7531\u4F7F\u7528\u5176\u4E2D\u7684\u529F\u80FD\u3002

    \u65B9\u6CD5\u4F53\u672B\u5C3E\u6761\u4EF6\u9700\u8981\u8FD4\u56DE\u4E00\u4E2A Boolean\uFF0C\u5373\u6700\u7EC8\u7684\u6761\u4EF6\u5224\u65AD\u7ED3\u679C\u3002

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 FieldFinder.modifiers\u3001MethodFinder.modifiers\u3001ConstructorFinder.modifiers \u65B9\u6CD5\u4EE5\u53CA ModifierRules\u3002

    \u6DF7\u6DC6\u7684\u5B57\u8282\u7801

    \u4F60\u53EF\u80FD\u5DF2\u7ECF\u6CE8\u610F\u5230\u4E86\uFF0C\u8FD9\u91CC\u7ED9\u51FA\u7684\u793A\u4F8B Class \u4E2D\u6709\u4E24\u4E2A\u6DF7\u6DC6\u7684\u53D8\u91CF\u540D\u79F0\uFF0C\u5B83\u4EEC\u90FD\u662F a\uFF0C\u8FD9\u4E2A\u65F6\u5019\u6211\u4EEC\u8981\u600E\u4E48\u5F97\u5230\u5B83\u4EEC\u5462\uFF1F

    \u6709\u4E24\u79CD\u65B9\u6848\u3002

    \u7B2C\u4E00\u79CD\u65B9\u6848\uFF0C\u786E\u5B9A\u53D8\u91CF\u7684\u540D\u79F0\u548C\u7C7B\u578B\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.field {
    -    name = "a"
    -    type = BooleanType
    -}.get(instance).any() // \u5F97\u5230\u540D\u79F0\u4E3A a \u7C7B\u578B\u4E3A Boolean \u7684\u53D8\u91CF
    -

    \u7B2C\u4E8C\u79CD\u65B9\u6848\uFF0C\u786E\u5B9A\u53D8\u91CF\u7684\u7C7B\u578B\u6240\u5728\u7684\u4F4D\u7F6E\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.field {
    -    type(BooleanType).index().first()
    -}.get(instance).any() // \u5F97\u5230\u7B2C\u4E00\u4E2A\u7C7B\u578B\u4E3A Boolean \u7684\u53D8\u91CF
    -

    \u4EE5\u4E0A\u4E24\u79CD\u60C5\u51B5\u5747\u53EF\u5F97\u5230\u5BF9\u5E94\u7684\u53D8\u91CF private boolean a\u3002

    \u540C\u6837\u5730\uFF0C\u8FD9\u4E2A Class \u4E2D\u4E5F\u6709\u4E24\u4E2A\u6DF7\u6DC6\u7684\u65B9\u6CD5\u540D\u79F0\uFF0C\u5B83\u4EEC\u90FD\u662F b\u3002

    \u4F60\u4E5F\u53EF\u4EE5\u6709\u4E24\u79CD\u65B9\u6848\u6765\u5F97\u5230\u5B83\u4EEC\u3002

    \u7B2C\u4E00\u79CD\u65B9\u6848\uFF0C\u786E\u5B9A\u65B9\u6CD5\u7684\u540D\u79F0\u548C\u65B9\u6CD5\u53C2\u6570\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "b"
    -    param(StringClass)
    -}.get(instance).call("test_string") // \u5F97\u5230\u540D\u79F0\u4E3A b \u65B9\u6CD5\u53C2\u6570\u4E3A [String] \u7684\u65B9\u6CD5
    -

    \u7B2C\u4E8C\u79CD\u65B9\u6848\uFF0C\u786E\u5B9A\u65B9\u6CD5\u7684\u53C2\u6570\u6240\u5728\u7684\u4F4D\u7F6E\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    param(StringClass).index().first()
    -}.get(instance).call("test_string") // \u5F97\u5230\u7B2C\u4E00\u4E2A\u65B9\u6CD5\u53C2\u6570\u4E3A [String] \u7684\u65B9\u6CD5
    -

    \u7531\u4E8E\u89C2\u5BDF\u5230\u8FD9\u4E2A\u65B9\u6CD5\u5728 Class \u7684\u6700\u540E\u4E00\u4E2A\uFF0C\u90A3\u6211\u4EEC\u8FD8\u6709\u4E00\u4E2A\u5907\u9009\u65B9\u6848\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    order().index().last()
    -}.get(instance).call("test_string") // \u5F97\u5230\u5F53\u524D Class \u7684\u6700\u540E\u4E00\u4E2A\u65B9\u6CD5
    -

    \u6CE8\u610F

    \u8BF7\u5C3D\u91CF\u907F\u514D\u4F7F\u7528 order \u6765\u7B5B\u9009\u5B57\u8282\u7801\u7684\u4E0B\u6807\uFF0C\u5B83\u4EEC\u53EF\u80FD\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u9664\u975E\u4F60\u786E\u5B9A\u5B83\u5728\u8FD9\u4E2A Class \u4E2D\u7684\u4F4D\u7F6E\u4E00\u5B9A\u4E0D\u4F1A\u53D8\u3002

    \u76F4\u63A5\u8C03\u7528

    \u4E0A\u9762\u4ECB\u7ECD\u7684\u8C03\u7528\u5B57\u8282\u7801\u7684\u65B9\u6CD5\u90FD\u9700\u8981\u4F7F\u7528 get(instance) \u624D\u80FD\u8C03\u7528\u5BF9\u5E94\u7684\u65B9\u6CD5\uFF0C\u6709\u6CA1\u6709\u7B80\u5355\u4E00\u70B9\u7684\u529E\u6CD5\u5462\uFF1F

    \u6B64\u65F6\uFF0C\u4F60\u53EF\u4EE5\u5728\u4EFB\u610F\u5B9E\u4F8B\u4E0A\u4F7F\u7528 current \u65B9\u6CD5\u6765\u521B\u5EFA\u4E00\u4E2A\u8C03\u7528\u7A7A\u95F4\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u4E0D\u80FD\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -instance.current {
    -    // \u6267\u884C doTask \u65B9\u6CD5
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -    // \u6267\u884C stop \u65B9\u6CD5
    -    method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -    // \u5F97\u5230 name
    -    val name = method { name = "getName" }.string()
    -}
    -

    \u6211\u4EEC\u8FD8\u53EF\u4EE5\u7528 superClass \u8C03\u7528\u5F53\u524D Class \u7236\u7C7B\u7684\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u4E0D\u80FD\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -instance.current {
    -    // \u6267\u884C\u7236\u7C7B\u7684 doBaseTask \u65B9\u6CD5
    -    superClass().method {
    -        name = "doBaseTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    \u5982\u679C\u4F60\u4E0D\u559C\u6B22\u4F7F\u7528\u4E00\u4E2A\u5927\u62EC\u53F7\u7684\u8C03\u7528\u57DF\u6765\u521B\u5EFA\u5F53\u524D\u5B9E\u4F8B\u7684\u547D\u540D\u7A7A\u95F4\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 current() \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B\uFF0C\u8FD9\u4E2A Class \u662F\u4E0D\u80FD\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -val instance = Test()
    -// \u6267\u884C doTask \u65B9\u6CD5
    -instance
    -    .current()
    -    .method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -// \u6267\u884C stop \u65B9\u6CD5
    -instance
    -    .current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// \u5F97\u5230 name
    -val name = instance.current().method { name = "getName" }.string()
    -

    \u540C\u6837\u5730\uFF0C\u5B83\u4EEC\u4E4B\u95F4\u53EF\u4EE5\u8FDE\u7EED\u8C03\u7528\uFF0C\u4F46\u4E0D\u5141\u8BB8\u5185\u8054\u8C03\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u4E0D\u80FD\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -instance.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}.current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// \u2757\u6CE8\u610F\uFF0C\u56E0\u4E3A current() \u8FD4\u56DE\u7684\u662F CurrentClass \u81EA\u8EAB\u5BF9\u8C61\uFF0C\u6240\u4EE5\u4E0D\u80FD\u50CF\u4E0B\u9762\u8FD9\u6837\u8C03\u7528
    -instance.current().current()
    -

    \u9488\u5BF9 Field \u5B9E\u4F8B\uFF0C\u8FD8\u6709\u4E00\u4E2A\u4FBF\u6377\u7684\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u76F4\u63A5\u83B7\u53D6 Field \u6240\u5728\u5B9E\u4F8B\u7684\u5BF9\u8C61\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u4E0D\u80FD\u88AB\u76F4\u63A5\u5F97\u5230\u7684
    -instance.current {
    -    // <\u65B9\u68481>
    -    field {
    -        name = "baseInstance"
    -    }.current {
    -        method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }.call("task_name")
    -    }
    -    // <\u65B9\u68482>
    -    field {
    -        name = "baseInstance"
    -    }.current()
    -        ?.method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }?.call("task_name")
    -}
    -

    \u6CE8\u610F

    \u4E0A\u8FF0 current \u65B9\u6CD5\u76F8\u5F53\u4E8E\u5E2E\u4F60\u8C03\u7528\u4E86 CurrentClass \u4E2D\u7684 field { ... }.any()?.current() \u65B9\u6CD5\u3002

    \u82E5\u4E0D\u5B58\u5728 CurrentClass \u8C03\u7528\u57DF\uFF0C\u4F60\u9700\u8981\u4F7F\u7528 field { ... }.get(instance).current() \u6765\u8FDB\u884C\u8C03\u7528\u3002

    \u95EE\u9898\u53C8\u6765\u4E86\uFF0C\u6211\u60F3\u4F7F\u7528\u53CD\u5C04\u7684\u65B9\u5F0F\u521B\u5EFA\u5982\u4E0B\u7684\u5B9E\u4F8B\u5E76\u8C03\u7528\u5176\u4E2D\u7684\u65B9\u6CD5\uFF0C\u8BE5\u600E\u4E48\u505A\u5462\uFF1F

    \u793A\u4F8B\u5982\u4E0B

    Test(true).doTask("task_name")
    -

    \u901A\u5E38\u60C5\u51B5\u4E0B\uFF0C\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u6807\u51C6\u7684\u53CD\u5C04 API \u6765\u8C03\u7528\u3002

    \u793A\u4F8B\u5982\u4E0B

    "com.demo.Test".toClass()
    -    .getDeclaredConstructor(Boolean::class.java)
    -    .apply { isAccessible = true }
    -    .newInstance(true)
    -    .apply {
    -        javaClass
    -            .getDeclaredMethod("doTask", String::class.java)
    -            .apply { isAccessible = true }
    -            .invoke(this, "task_name")
    -    }
    -

    \u4F46\u662F\u611F\u89C9\u8FD9\u79CD\u505A\u6CD5\u597D\u9EBB\u70E6\uFF0C\u6709\u6CA1\u6709\u66F4\u7B80\u6D01\u7684\u8C03\u7528\u65B9\u6CD5\u5462\uFF1F

    \u8FD9\u4E2A\u65F6\u5019\uFF0C\u6211\u4EEC\u8FD8\u53EF\u4EE5\u501F\u52A9 buildOf \u65B9\u6CD5\u6765\u521B\u5EFA\u4E00\u4E2A\u5B9E\u4F8B\u3002

    \u793A\u4F8B\u5982\u4E0B

    "com.demo.Test".toClass().buildOf(true) { param(BooleanType) }?.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    \u82E5\u4F60\u5E0C\u671B buildOf \u65B9\u6CD5\u8FD4\u56DE\u5F53\u524D\u5B9E\u4F8B\u7684\u7C7B\u578B\uFF0C\u4F60\u53EF\u4EE5\u5728\u5176\u4E2D\u52A0\u5165\u7C7B\u578B\u6CDB\u578B\u58F0\u660E\uFF0C\u800C\u65E0\u9700\u4F7F\u7528 as \u6765 cast \u76EE\u6807\u7C7B\u578B\u3002

    \u8FD9\u79CD\u60C5\u51B5\u591A\u7528\u4E8E\u5B9E\u4F8B\u672C\u8EAB\u7684\u6784\u9020\u65B9\u6CD5\u662F\u79C1\u6709\u7684\uFF0C\u4F46\u662F\u91CC\u9762\u7684\u65B9\u6CD5\u662F\u516C\u6709\u7684\uFF0C\u8FD9\u6837\u6211\u4EEC\u53EA\u9700\u8981\u5BF9\u5176\u6784\u9020\u65B9\u6CD5\u8FDB\u884C\u53CD\u5C04\u521B\u5EFA\u5373\u53EF\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u4E2A Class \u662F\u80FD\u591F\u76F4\u63A5\u88AB\u5F97\u5230\u7684
    -val test = Test::class.java.buildOf<Test>(true) { param(BooleanType) }
    -test.doTask("task_name")
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 CurrentClass \u4EE5\u53CA Class.buildOf \u65B9\u6CD5\u3002

    \u518D\u6B21\u67E5\u627E

    \u5047\u8BBE\u6709\u4E09\u4E2A\u4E0D\u540C\u7248\u672C\u7684 Class\uFF0C\u5B83\u4EEC\u90FD\u662F\u8FD9\u4E2A APP \u4E0D\u540C\u7248\u672C\u76F8\u540C\u7684 Class\u3002

    \u8FD9\u91CC\u9762\u540C\u6837\u90FD\u6709\u4E00\u4E2A\u65B9\u6CD5 doTask\uFF0C\u5047\u8BBE\u5B83\u4EEC\u7684\u529F\u80FD\u662F\u4E00\u6837\u7684\u3002

    \u7248\u672C A \u793A\u4F8B\u5982\u4E0B

    public class Test {
    -
    -    public void doTask() {
    -        // ...
    -    }
    -}
    -

    \u7248\u672C B \u793A\u4F8B\u5982\u4E0B

    public class Test {
    -
    -    public void doTask(String taskName) {
    -        // ...
    -    }
    -}
    -

    \u7248\u672C C \u793A\u4F8B\u5982\u4E0B

    public class Test {
    -
    -    public void doTask(String taskName, int type) {
    -        // ...
    -    }
    -}
    -

    \u6211\u4EEC\u9700\u8981\u5728\u4E0D\u540C\u7684\u7248\u672C\u4E2D\u5F97\u5230\u8FD9\u4E2A\u76F8\u540C\u529F\u80FD\u7684 doTask \u65B9\u6CD5\uFF0C\u8981\u600E\u4E48\u505A\u5462\uFF1F

    \u6B64\u65F6\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 RemedyPlan \u5B8C\u6210\u4F60\u7684\u9700\u6C42\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.onFind {
    -        // \u53EF\u5728\u8FD9\u91CC\u5B9E\u73B0\u627E\u5230\u7684\u903B\u8F91
    -    }
    -    method {
    -        name = "doTask"
    -        param(StringClass, IntType)
    -    }.onFind {
    -        // \u53EF\u5728\u8FD9\u91CC\u5B9E\u73B0\u627E\u5230\u7684\u903B\u8F91
    -    }
    -}.wait(instance) {
    -    // \u5F97\u5230\u65B9\u6CD5\u7684\u7ED3\u679C
    -}
    -

    \u7279\u522B\u6CE8\u610F

    \u4F7F\u7528\u4E86 RemedyPlan \u7684\u65B9\u6CD5\u67E5\u627E\u7ED3\u679C\u4E0D\u80FD\u518D\u4F7F\u7528 get \u7684\u65B9\u5F0F\u5F97\u5230\u65B9\u6CD5\u5B9E\u4F8B\uFF0C\u5E94\u5F53\u4F7F\u7528 wait \u65B9\u6CD5\u3002

    \u53E6\u5916\uFF0C\u4F60\u8FD8\u53EF\u4EE5\u5728\u4F7F\u7528 \u591A\u91CD\u67E5\u627E \u7684\u60C5\u51B5\u4E0B\u7EE7\u7EED\u4F7F\u7528 RemedyPlan\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u5C31\u662F\u8FD9\u4E2A Class \u7684\u5B9E\u4F8B
    -val instance = Test()
    -// \u4F7F\u7528 YukiReflection \u8C03\u7528\u5E76\u6267\u884C
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        paramCount(0..1)
    -    }.onFind {
    -        // \u53EF\u5728\u8FD9\u91CC\u5B9E\u73B0\u627E\u5230\u7684\u903B\u8F91
    -    }
    -    method {
    -        name = "doTask"
    -        paramCount(1..2)
    -    }.onFind {
    -        // \u53EF\u5728\u8FD9\u91CC\u5B9E\u73B0\u627E\u5230\u7684\u903B\u8F91
    -    }
    -}.waitAll(instance) {
    -    // \u5F97\u5230\u65B9\u6CD5\u7684\u7ED3\u679C
    -}
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 MethodFinder.RemedyPlan\u3001ConstructorFinder.RemedyPlan\u3001FieldFinder.RemedyPlan\u3002

    \u76F8\u5BF9\u5339\u914D

    \u5047\u8BBE\u5F53\u524D APP \u4E2D\u4E0D\u540C\u7248\u672C\u4E2D\u5B58\u5728\u529F\u80FD\u76F8\u540C\u7684 Class \u4F46\u4EC5\u6709 Class \u7684\u540D\u79F0\u4E0D\u4E00\u6837\u3002

    \u7248\u672C A \u793A\u4F8B\u5982\u4E0B

    public class ATest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    \u7248\u672C B \u793A\u4F8B\u5982\u4E0B

    public class BTest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    \u8FD9\u4E2A\u65F6\u5019\u6211\u4EEC\u60F3\u5728\u6BCF\u4E2A\u7248\u672C\u90FD\u8C03\u7528\u8FD9\u4E2A Class \u91CC\u7684 doTask \u65B9\u6CD5\u8BE5\u600E\u4E48\u505A\u5462\uFF1F

    \u901A\u5E38\u505A\u6CD5\u662F\u5224\u65AD Class \u662F\u5426\u5B58\u5728\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u9996\u5148\u67E5\u627E\u5230\u8FD9\u4E2A Class
    -val currentClass = 
    -    if("com.demo.ATest".hasClass()) "com.demo.ATest".toClass() else "com.demo.BTest".toClass()
    -// \u7136\u540E\u518D\u67E5\u627E\u8FD9\u4E2A\u65B9\u6CD5\u5E76\u8C03\u7528
    -currentClass.method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    \u611F\u89C9\u8FD9\u79CD\u65B9\u6848\u975E\u5E38\u7684\u4E0D\u4F18\u96C5\u4E14\u7E41\u7410\uFF0C\u90A3\u4E48\u6B64\u65F6 YukiReflection \u5C31\u4E3A\u4F60\u63D0\u4F9B\u4E86\u4E00\u4E2A\u975E\u5E38\u65B9\u4FBF\u7684 VariousClass \u4E13\u95E8\u6765\u89E3\u51B3\u8FD9\u4E2A\u95EE\u9898\u3002

    \u73B0\u5728\uFF0C\u4F60\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u83B7\u53D6\u5230\u8FD9\u4E2A Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    VariousClass("com.demo.ATest", "com.demo.BTest").get().method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    \u82E5\u5F53\u524D Class \u5728\u6307\u5B9A\u7684 ClassLoader \u4E2D\u5B58\u5728\uFF0C\u4F60\u53EF\u4EE5\u5728 get \u4E2D\u586B\u5165\u4F60\u7684 ClassLoader\u3002

    \u793A\u4F8B\u5982\u4E0B

    val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").get(customClassLoader).method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    \u82E5\u4F60\u4E0D\u786E\u5B9A\u6240\u6709\u7684 Class \u4E00\u5B9A\u4F1A\u88AB\u5339\u914D\u5230\uFF0C\u4F60\u53EF\u4EE5\u4F7F\u7528 getOrNull \u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    val customClassLoader: ClassLoader? = ... // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F\u4F60\u7684 ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").getOrNull(customClassLoader)?.method {
    -    name = "doTask"
    -    emptyParam()
    -}?.get()?.call()
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 VariousClass\u3002

    \u8C03\u7528\u6CDB\u578B

    \u5728\u53CD\u5C04\u8FC7\u7A0B\u4E2D\uFF0C\u6211\u4EEC\u53EF\u80FD\u4F1A\u9047\u5230\u6CDB\u578B\u95EE\u9898\uFF0C\u5728\u6CDB\u578B\u7684\u53CD\u5C04\u5904\u7406\u4E0A\uFF0CYukiReflection \u540C\u6837\u63D0\u4F9B\u4E86\u4E00\u4E2A\u53EF\u5728\u4EFB\u610F\u5730\u65B9\u4F7F\u7528\u7684\u8BED\u6CD5\u7CD6\u3002

    \u4F8B\u5982\u6211\u4EEC\u6709\u5982\u4E0B\u7684\u6CDB\u578B\u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -

    \u5F53\u6211\u4EEC\u60F3\u5728\u5F53\u524D Class \u4E2D\u83B7\u5F97\u6CDB\u578B T \u6216 R \u7684 Class \u5B9E\u4F8B\uFF0C\u53EA\u9700\u8981\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // \u83B7\u5F97\u5F53\u524D\u5B9E\u4F8B\u7684\u64CD\u4F5C\u5BF9\u8C61
    -        // \u83B7\u5F97 T \u7684 Class \u5B9E\u4F8B\uFF0C\u5728\u53C2\u6570\u7B2C 0 \u4F4D\uFF0C\u9ED8\u8BA4\u503C\u53EF\u4EE5\u4E0D\u5199
    -        val tClass = current().generic()?.argument()
    -        // \u83B7\u5F97 R \u7684 Class \u5B9E\u4F8B\uFF0C\u5728\u53C2\u6570\u7B2C 1 \u4F4D
    -        val rClass = current().generic()?.argument(index = 1)
    -        // \u4F60\u8FD8\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u5199\u6CD5
    -        current().generic {
    -             // \u83B7\u5F97 T \u7684 Class \u5B9E\u4F8B\uFF0C\u5728\u53C2\u6570\u7B2C 0 \u4F4D\uFF0C\u9ED8\u8BA4\u503C\u53EF\u4EE5\u4E0D\u5199
    -            val tClass = argument()
    -            // \u83B7\u5F97 R \u7684 Class \u5B9E\u4F8B\uFF0C\u5728\u53C2\u6570\u7B2C 1 \u4F4D
    -            val rClass = argument(index = 1)
    -        }
    -    }
    -}
    -

    \u5F53\u6211\u4EEC\u60F3\u5728\u5916\u90E8\u8C03\u7528\u8FD9\u4E2A Class \u65F6\uFF0C\u5C31\u53EF\u4EE5\u6709\u5982\u4E0B\u5B9E\u73B0\u3002

    \u793A\u4F8B\u5982\u4E0B

    // \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F T \u7684 Class
    -class TI {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -// \u5047\u8BBE\u8FD9\u4E2A\u5C31\u662F T \u7684\u5B9E\u4F8B
    -val tInstance: TI? = ...
    -// \u83B7\u5F97 T \u7684 Class \u5B9E\u4F8B\uFF0C\u5728\u53C2\u6570\u7B2C 0 \u4F4D\uFF0C\u9ED8\u8BA4\u503C\u53EF\u4EE5\u4E0D\u5199\uFF0C\u5E76\u83B7\u5F97\u5176\u4E2D\u7684\u65B9\u6CD5 foo \u5E76\u8C03\u7528
    -TestGeneric::class.java.generic()?.argument()?.method {
    -    name = "foo"
    -    emptyParam()
    -}?.get(tInstance)?.invoke<TI>()
    -

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u529F\u80FD\u8BF7\u53C2\u8003 CurrentClass.generic\u3001Class.generic \u65B9\u6CD5\u4EE5\u53CA GenericClass\u3002

    \u6CE8\u610F\u8BEF\u533A

    \u8FD9\u91CC\u5217\u4E3E\u4E86\u4F7F\u7528\u65F6\u53EF\u80FD\u4F1A\u9047\u5230\u7684\u8BEF\u533A\u90E8\u5206\uFF0C\u53EF\u4F9B\u53C2\u8003\u3002

    \u9650\u5236\u6027\u67E5\u627E\u6761\u4EF6

    \u7279\u522B\u6CE8\u610F

    \u5728\u67E5\u627E\u6761\u4EF6\u4E2D\uFF0C\u9664\u4E86 order \u4F60\u53EA\u80FD\u4F7F\u7528\u4E00\u6B21 index \u529F\u80FD\u3002

    \u793A\u4F8B\u5982\u4E0B

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    // \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u8BF7\u4EC5\u4FDD\u7559\u4E00\u4E2A index \u65B9\u6CD5
    -    returnType(StringClass).index(num = 1)
    -}
    -

    \u4EE5\u4E0B\u67E5\u627E\u6761\u4EF6\u7684\u4F7F\u7528\u662F\u6CA1\u6709\u4EFB\u4F55\u95EE\u9898\u7684\u3002

    \u793A\u4F8B\u5982\u4E0B

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    order().index(num = 1)
    -}
    -

    \u5FC5\u8981\u7684\u67E5\u627E\u6761\u4EF6

    \u7279\u522B\u6CE8\u610F

    \u5728\u666E\u901A\u65B9\u6CD5\u67E5\u627E\u6761\u4EF6\u4E2D\uFF0C\u5373\u4F7F\u662F\u65E0\u53C2\u7684\u65B9\u6CD5\u4E5F\u9700\u8981\u8BBE\u7F6E\u67E5\u627E\u6761\u4EF6\u3002

    \u5047\u8BBE\u6211\u4EEC\u6709\u5982\u4E0B\u7684 Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    public class TestFoo {
    -
    -    public void foo(String string) {
    -        // ...
    -    }
    -
    -    public void foo() {
    -        // ...
    -    }
    -}
    -

    \u6211\u4EEC\u8981\u5F97\u5230\u5176\u4E2D\u7684 public void foo() \u65B9\u6CD5\uFF0C\u53EF\u4EE5\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    TestFoo::class.java.method {
    -    name = "foo"
    -}
    -

    \u4F46\u662F\uFF0C\u4E0A\u9762\u7684\u4F8B\u5B50\u662F\u9519\u8BEF\u7684\u3002

    \u4F60\u4F1A\u53D1\u73B0\u8FD9\u4E2A Class \u4E2D\u6709\u4E24\u4E2A foo \u65B9\u6CD5\uFF0C\u5176\u4E2D\u4E00\u4E2A\u5E26\u6709\u65B9\u6CD5\u53C2\u6570\u3002

    \u7531\u4E8E\u4E0A\u8FF0\u4F8B\u5B50\u6CA1\u6709\u8BBE\u7F6E param \u7684\u67E5\u627E\u6761\u4EF6\uFF0C\u5F97\u5230\u7684\u7ED3\u679C\u5C06\u4F1A\u662F\u5339\u914D\u540D\u79F0\u4E14\u5339\u914D\u5B57\u8282\u7801\u987A\u5E8F\u7684\u7B2C\u4E00\u4E2A\u65B9\u6CD5 public void foo(String string)\uFF0C\u800C\u4E0D\u662F\u6211\u4EEC\u9700\u8981\u7684\u6700\u540E\u4E00\u4E2A\u65B9\u6CD5\u3002

    \u8FD9\u662F\u4E00\u4E2A\u7ECF\u5E38\u4F1A\u51FA\u73B0\u7684\u9519\u8BEF\uFF0C\u6CA1\u6709\u65B9\u6CD5\u53C2\u6570\u5C31\u4F1A\u4E22\u5931\u65B9\u6CD5\u53C2\u6570\u67E5\u627E\u6761\u4EF6\u7684\u4F7F\u7528\u95EE\u9898\u3002

    \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u5982\u4E0B\u3002

    \u793A\u4F8B\u5982\u4E0B

    TestFoo::class.java.method {
    -    name = "foo"
    -    // \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u6DFB\u52A0\u8BE6\u7EC6\u7684\u7B5B\u9009\u6761\u4EF6
    -    emptyParam()
    -}
    -

    \u81F3\u6B64\uFF0C\u4E0A\u8FF0\u7684\u793A\u4F8B\u5C06\u53EF\u4EE5\u5B8C\u7F8E\u5730\u5339\u914D\u5230 public void foo() \u65B9\u6CD5\u3002

    \u53EF\u7B80\u5199\u67E5\u627E\u6761\u4EF6

    \u5728\u6784\u9020\u65B9\u6CD5\u67E5\u627E\u6761\u4EF6\u4E2D\uFF0C\u65E0\u53C2\u7684\u6784\u9020\u65B9\u6CD5\u53EF\u4EE5\u4E0D\u9700\u8981\u586B\u5199\u67E5\u627E\u6761\u4EF6\u3002

    \u5047\u8BBE\u6211\u4EEC\u6709\u5982\u4E0B\u7684 Class\u3002

    \u793A\u4F8B\u5982\u4E0B

    public class TestFoo {
    -
    -    public TestFoo() {
    -        // ...
    -    }
    -}
    -

    \u6211\u4EEC\u8981\u5F97\u5230\u5176\u4E2D\u7684 public TestFoo() \u6784\u9020\u65B9\u6CD5\uFF0C\u53EF\u4EE5\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u3002

    \u793A\u4F8B\u5982\u4E0B

    TestFoo::class.java.constructor { emptyParam() }
    -

    \u4E0A\u9762\u7684\u4F8B\u5B50\u53EF\u4EE5\u6210\u529F\u83B7\u53D6\u5230 public TestFoo() \u6784\u9020\u65B9\u6CD5\uFF0C\u4F46\u662F\u611F\u89C9\u6709\u4E00\u4E9B\u7E41\u7410\u3002

    \u4E0E\u666E\u901A\u65B9\u6CD5\u4E0D\u540C\uFF0C\u7531\u4E8E\u6784\u9020\u65B9\u6CD5\u4E0D\u9700\u8981\u8003\u8651 name \u540D\u79F0\uFF0C\u5F53\u6784\u9020\u65B9\u6CD5\u6CA1\u6709\u53C2\u6570\u7684\u65F6\u5019\uFF0C\u6211\u4EEC\u53EF\u4EE5\u7701\u7565 emptyParam \u53C2\u6570\u3002

    \u793A\u4F8B\u5982\u4E0B

    TestFoo::class.java.constructor()
    -

    \u5B57\u8282\u7801\u7C7B\u578B

    \u7279\u522B\u6CE8\u610F

    \u5728\u5B57\u8282\u7801\u8C03\u7528\u7ED3\u679C\u4E2D\uFF0Ccast \u65B9\u6CD5\u53EA\u80FD\u6307\u5B9A\u5B57\u8282\u7801\u5BF9\u5E94\u7684\u7C7B\u578B\u3002

    \u4F8B\u5982\u6211\u4EEC\u60F3\u5F97\u5230\u4E00\u4E2A Boolean \u7C7B\u578B\u7684\u53D8\u91CF\uFF0C\u628A\u4ED6\u8F6C\u6362\u4E3A String\u3002

    \u4EE5\u4E0B\u662F\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().string() // \u2757\u9519\u8BEF\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u5FC5\u987B cast \u4E3A\u5B57\u8282\u7801\u76EE\u6807\u7C7B\u578B
    -

    \u4EE5\u4E0B\u662F\u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\u3002

    \u793A\u4F8B\u5982\u4E0B

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().boolean().toString() // \u2705 \u6B63\u786E\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u5F97\u5230\u7C7B\u578B\u540E\u518D\u8FDB\u884C\u8F6C\u6362
    -

    \u5E38\u7528\u7C7B\u578B\u6269\u5C55

    \u5728\u67E5\u627E\u65B9\u6CD5\u3001\u53D8\u91CF\u7684\u65F6\u5019\u6211\u4EEC\u901A\u5E38\u9700\u8981\u6307\u5B9A\u6240\u67E5\u627E\u7684\u7C7B\u578B\u3002

    \u793A\u4F8B\u5982\u4E0B

    field {
    -    name = "test"
    -    type = Boolean::class.javaPrimitiveType
    -}
    -

    \u5728 Kotlin \u4E2D\u8868\u8FBE\u51FA Boolean::class.javaPrimitiveType \u8FD9\u4E2A\u7C7B\u578B\u7684\u5199\u6CD5\u5F88\u957F\uFF0C\u611F\u89C9\u5E76\u4E0D\u65B9\u4FBF\u3002

    \u56E0\u6B64\uFF0CYukiReflection \u4E3A\u5F00\u53D1\u8005\u5C01\u88C5\u4E86\u5E38\u89C1\u7684\u7C7B\u578B\u8C03\u7528\uFF0C\u5176\u4E2D\u5305\u542B\u4E86 Android \u7684\u76F8\u5173\u7C7B\u578B\u548C Java \u7684\u5E38\u89C1\u7C7B\u578B\u4E0E\u539F\u59CB\u7C7B\u578B\u5173\u952E\u5B57\u3002

    \u8FD9\u4E2A\u65F6\u5019\u4E0A\u9762\u7684\u7C7B\u578B\u5C31\u53EF\u4EE5\u5199\u4F5C\u5982\u4E0B\u5F62\u5F0F\u4E86\u3002

    \u793A\u4F8B\u5982\u4E0B

    field {
    -    name = "test"
    -    type = BooleanType
    -}
    -

    \u5728 Java \u5E38\u89C1\u7C7B\u578B\u4E2D\u7684\u539F\u59CB\u7C7B\u578B (\u6216\u57FA\u672C\u7C7B\u578B) \u5173\u952E\u5B57\u90FD\u5DF2\u88AB\u5C01\u88C5\u4E3A \u7C7B\u578B + Type \u7684\u65B9\u5F0F\uFF0C\u4F8B\u5982 IntType\u3001FloatType (\u5B83\u4EEC\u7684\u5B57\u8282\u7801\u7C7B\u578B\u4E3A int\u3001float)\u3002

    \u76F8\u5E94\u5730\uFF0C\u6570\u7EC4\u7C7B\u578B\u4E5F\u6709\u65B9\u4FBF\u7684\u4F7F\u7528\u65B9\u6CD5\uFF0C\u5047\u8BBE\u6211\u4EEC\u8981\u83B7\u5F97 String[] \u7C7B\u578B\u7684\u6570\u7EC4\u3002

    \u9700\u8981\u5199\u505A java.lang.reflect.Array.newInstance(String::class.java, 0).javaClass \u624D\u80FD\u5F97\u5230\u8FD9\u4E2A\u7C7B\u578B\u3002

    \u611F\u89C9\u662F\u4E0D\u662F\u5F88\u9EBB\u70E6\uFF0C\u8FD9\u4E2A\u65F6\u5019\u6211\u4EEC\u53EF\u4EE5\u4F7F\u7528\u65B9\u6CD5 ArrayClass(StringClass) \u6765\u5F97\u5230\u8FD9\u4E2A\u7C7B\u578B\u3002

    \u540C\u65F6\u7531\u4E8E String \u662F\u5E38\u89C1\u7C7B\u578B\uFF0C\u6240\u4EE5\u8FD8\u53EF\u4EE5\u76F4\u63A5\u4F7F\u7528 StringArrayClass \u6765\u5F97\u5230\u8FD9\u4E2A\u7C7B\u578B\u3002

    \u4E00\u4E9B\u5E38\u89C1\u9700\u6C42\u4E2D\u67E5\u627E\u7684\u65B9\u6CD5\uFF0C\u90FD\u6709\u5176\u5BF9\u5E94\u7684\u5C01\u88C5\u7C7B\u578B\u4EE5\u4F9B\u4F7F\u7528\uFF0C\u683C\u5F0F\u4E3A \u7C7B\u578B + Class\u3002

    \u4EE5\u4E0B\u662F Java \u4E2D\u4E00\u4E9B\u7279\u4F8B\u7C7B\u578B\u5728 YukiReflection \u4E2D\u7684\u5C01\u88C5\u540D\u79F0\u3002

    • void \u2192 UnitType

    • java.lang.Void \u2192 UnitClass

    • java.lang.Object \u2192 AnyClass

    • java.lang.Integer \u2192 IntClass

    • java.lang.Character \u2192 CharClass

    \u6CE8\u610F

    \u4EE5 \u7C7B\u578B + Type \u5C01\u88C5\u7C7B\u578B\u4F1A\u4E14\u4EC5\u4F1A\u8868\u793A\u4E3A Java \u539F\u59CB\u7C7B\u578B\u5173\u952E\u5B57\uFF0C\u7531\u4E8E Kotlin \u4E2D\u4E0D\u5B58\u5728\u539F\u59CB\u7C7B\u578B\u8FD9\u4E2A\u6982\u5FF5\uFF0C\u6240\u4EE5\u5B83\u4EEC\u90FD\u4F1A\u88AB\u5B9A\u4E49\u4E3A KClass\u3002

    Java \u4E2D\u5171\u6709 9 \u4E2A\u539F\u59CB\u7C7B\u578B\u5173\u952E\u5B57\uFF0C\u5176\u4E2D 8 \u4E2A\u4E3A\u539F\u59CB\u7C7B\u578B\uFF0C\u5206\u522B\u4E3A boolean\u3001char\u3001byte\u3001short\u3001int\u3001float\u3001long\u3001double\uFF0C\u5176\u4E2D void \u7C7B\u578B\u662F\u4E00\u4E2A\u7279\u4F8B\u3002

    \u540C\u65F6\u5B83\u4EEC\u90FD\u6709 Java \u81EA\u8EAB\u5BF9\u5E94\u7684\u5C01\u88C5\u7C7B\u578B\uFF0C\u4F8B\u5982 java.lang.Boolean\u3001java.lang.Integer\uFF0C\u8FD9\u4E9B\u7C7B\u578B\u662F\u4E0D\u76F8\u7B49\u7684\uFF0C\u8BF7\u6CE8\u610F\u533A\u5206\u3002

    \u540C\u6837\u5730\uFF0C\u6570\u7EC4\u4E5F\u6709\u5BF9\u5E94\u7684\u5C01\u88C5\u7C7B\u578B\uFF0C\u5B83\u4EEC\u4E5F\u9700\u8981\u4E0E Java \u539F\u59CB\u7C7B\u578B\u5173\u952E\u5B57 \u8FDB\u884C\u533A\u5206\u3002

    \u4F8B\u5982 byte[] \u7684\u5C01\u88C5\u7C7B\u578B\u4E3A ByteArrayType \u6216 ArrayClass(ByteType)\uFF0C\u800C Byte[] \u7684\u5C01\u88C5\u7C7B\u578B\u4E3A ByteArrayClass \u6216 ArrayClass(ByteClass)\uFF0C\u8FD9\u4E9B\u7C7B\u578B\u4E5F\u662F\u4E0D\u76F8\u7B49\u7684\u3002

    \u5C0F\u63D0\u793A

    \u66F4\u591A\u7C7B\u578B\u53EF\u67E5\u770B ComponentTypeFactory\u3001GraphicsTypeFactory\u3001ViewTypeFactory\u3001VariableTypeFactory\u3002

    \u540C\u65F6\uFF0C\u6B22\u8FCE\u4F60\u80FD\u8D21\u732E\u66F4\u591A\u7684\u5E38\u7528\u7C7B\u578B\u3002

    `,327);function f(T,x){const p=l("Badge"),o=l("ExternalLinkIcon");return r(),t("div",null,[d,s("h3",y,[A,u,e(p,{type:"tip",text:"Beta",vertical:"middle"})]),v,s("div",C,[D,B,s("p",null,[m,s("a",b,[F,e(o)]),g,k,h])]),q])}const P=c(i,[["render",f],["__file","features.html.vue"]]);export{P as default}; diff --git a/docs/assets/future.html.18e105a7.js b/docs/assets/future.html.18e105a7.js deleted file mode 100644 index d0f5f5e..0000000 --- a/docs/assets/future.html.18e105a7.js +++ /dev/null @@ -1,60 +0,0 @@ -import{_ as s,o as n,c as a,a as l}from"./app.2add9aa5.js";const p={},o=l(`

    \u5C55\u671B\u672A\u6765

    \u672A\u6765\u662F\u7F8E\u597D\u7684\uFF0C\u4E5F\u662F\u4E0D\u786E\u5B9A\u7684\uFF0C\u8BA9\u6211\u4EEC\u5171\u540C\u671F\u5F85 YukiReflection \u5728\u672A\u6765\u7684\u53D1\u5C55\u7A7A\u95F4\u3002

    \u672A\u6765\u7684\u8BA1\u5212

    \u8FD9\u91CC\u6536\u5F55\u4E86 YukiReflection \u53EF\u80FD\u4F1A\u5728\u540E\u671F\u6DFB\u52A0\u7684\u529F\u80FD\u3002

    \u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801

    \u4F7F\u7528 stub \u7684\u65B9\u5F0F\u521B\u5EFA\u4E00\u4E2A Kotlin \u7C7B\uFF0C\u5E76\u58F0\u660E\u5176\u4E2D\u7684\u53C2\u6570\uFF0C\u4EE5\u53CA\u5176\u5728\u5404\u4E2A\u7248\u672C\u4E2D\u7684\u4E0D\u540C\u72B6\u6001\u3002

    \u6BD4\u5982\u4E0B\u9762\u7684\u8FD9\u4E2A Java \u7C7B\u5C31\u662F\u6211\u4EEC\u9700\u8981\u53CD\u5C04\u7684\u76EE\u6807\u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

    package com.example.test;
    -
    -public class MyClass {
    -    
    -    private String myField = "test";
    -
    -    public MyClass() {
    -        // ...
    -    }
    -
    -    private String myMethod1(String var1, int var2) {
    -        // ...
    -    }
    -
    -    private void myMethod2() {
    -        // ...
    -    }
    -
    -    private void myMethod3(String var1) {
    -        // ...
    -    }
    -}
    -

    \u901A\u8FC7\u76EE\u524D API \u7684\u73B0\u6709\u7528\u6CD5\u53EF\u4EE5\u4F7F\u7528\u5982\u4E0B\u65B9\u5F0F\u53CD\u5C04\u8C03\u7528\u8FD9\u4E2A\u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

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

    \u76EE\u524D\u8981\u5B9E\u73B0\u7684\u529F\u80FD\u662F\u53EF\u4EE5\u4F7F\u7528\u53CD\u5C04\u529F\u80FD\u76F4\u63A5\u5B9A\u4E49\u4E3A\u5982\u4E0B Kotlin \u7C7B\u3002

    \u793A\u4F8B\u5982\u4E0B

    package com.example.test
    -
    -@ReflectClass
    -class MyClass {
    -
    -    @ReflectField
    -    val myField: String = fieldValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod1(var1: String, var2: Int): String = methodReturnValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod2() = MethodReturnType.Unit
    -
    -    @ReflectMethod
    -    fun myMethod3(var1: String) = MethodReturnType.Unit
    -}
    -

    \u7136\u540E\u6211\u4EEC\u5C31\u53EF\u4EE5\u76F4\u63A5\u8C03\u7528\u8FD9\u4E2A\u5B9A\u4E49\u597D\u7684 Kotlin \u7C7B\u6765\u5B9E\u73B0\u53CD\u5C04\u529F\u80FD\uFF0CAPI \u4F1A\u6839\u636E\u6CE8\u89E3\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801\u3002

    \u793A\u4F8B\u5982\u4E0B

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

    \u5C0F\u63D0\u793A

    \u4EE5\u4E0A\u529F\u80FD\u53EF\u80FD\u4F1A\u5728\u5B9E\u9645\u63A8\u51FA\u540E\u6709\u6240\u53D8\u5316\uFF0C\u6700\u7EC8\u4EE5\u5B9E\u9645\u7248\u672C\u7684\u529F\u80FD\u4E3A\u51C6\u3002

    `,19),e=[o];function c(t,r){return n(),a("div",null,e)}const y=s(p,[["render",c],["__file","future.html.vue"]]);export{y as default}; diff --git a/docs/assets/future.html.47405c37.js b/docs/assets/future.html.47405c37.js deleted file mode 100644 index 578257a..0000000 --- a/docs/assets/future.html.47405c37.js +++ /dev/null @@ -1,60 +0,0 @@ -import{_ as s,o as n,c as a,a as l}from"./app.2add9aa5.js";const e={},o=l(`

    Looking for Future

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

    Future Plans

    Features that YukiReflection may add later are included here.

    Automatically Generate Reflection Code

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

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

    The following example

    package com.example.test;
    -
    -public class MyClass {
    -    
    -    private String myField = "test";
    -
    -    public MyClass() {
    -        //...
    -    }
    -
    -    private String myMethod1(String var1, int var2) {
    -        //...
    -    }
    -
    -    private void myMethod2() {
    -        //...
    -    }
    -
    -    private void myMethod3(String var1) {
    -        //...
    -    }
    -}
    -

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

    The following example

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

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

    The following example

    package com.example.test
    -
    -@ReflectClass
    -class MyClass {
    -
    -    @ReflectField
    -    val myField: String = fieldValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod1(var1: String, var2: Int): String = methodReturnValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod2() = MethodReturnType.Unit
    -
    -    @ReflectMethod
    -    fun myMethod3(var1: String) = MethodReturnType.Unit
    -}
    -

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

    The following example

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

    Tips

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

    `,19),p=[o];function t(c,r){return n(),a("div",null,p)}const y=s(e,[["render",t],["__file","future.html.vue"]]);export{y as default}; diff --git a/docs/assets/future.html.a5999f89.js b/docs/assets/future.html.a5999f89.js deleted file mode 100644 index 1cb45d6..0000000 --- a/docs/assets/future.html.a5999f89.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-3106ca14","path":"/zh-cn/about/future.html","title":"\u5C55\u671B\u672A\u6765","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u672A\u6765\u7684\u8BA1\u5212","slug":"\u672A\u6765\u7684\u8BA1\u5212","link":"#\u672A\u6765\u7684\u8BA1\u5212","children":[{"level":3,"title":"\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801","slug":"\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801","link":"#\u81EA\u52A8\u751F\u6210\u53CD\u5C04\u4EE3\u7801","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/about/future.md"}');export{e as data}; diff --git a/docs/assets/future.html.aa0c285e.js b/docs/assets/future.html.aa0c285e.js deleted file mode 100644 index e7da6ef..0000000 --- a/docs/assets/future.html.aa0c285e.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-ae7b83f2","path":"/en/about/future.html","title":"Looking for Future","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Future Plans","slug":"future-plans","link":"#future-plans","children":[{"level":3,"title":"Automatically Generate Reflection Code","slug":"automatically-generate-reflection-code","link":"#automatically-generate-reflection-code","children":[]}]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/about/future.md"}');export{e as data}; diff --git a/docs/assets/home.html.385ffce1.js b/docs/assets/home.html.385ffce1.js deleted file mode 100644 index 73008da..0000000 --- a/docs/assets/home.html.385ffce1.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as t,a as i}from"./app.2add9aa5.js";const n={},d=i('

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiReflection as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt \xA0Kotlin Static File

    • annotation \xA0Annotation Class

    • interface \xA0Interface Class

    • object \xA0Class (Singleton)

    • class \xA0Class

    • field \xA0Field or get / set method or read-only get method

    • method \xA0Method

    • enum \xA0Enum constant

    • ext-field \xA0Extension field (global)

    • ext-method \xA0Extension method (global)

    • i-ext-field \xA0Extension field (internal)

    • i-ext-method \xA0Extension method (internal)

    ',14),c=[d];function a(r,l){return o(),t("div",null,c)}const p=e(n,[["render",a],["__file","home.html.vue"]]);export{p as default}; diff --git a/docs/assets/home.html.6d4e805a.js b/docs/assets/home.html.6d4e805a.js deleted file mode 100644 index 118b3c4..0000000 --- a/docs/assets/home.html.6d4e805a.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-6a609e09","path":"/zh-cn/guide/home.html","title":"\u4ECB\u7ECD","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u80CC\u666F","slug":"\u80CC\u666F","link":"#\u80CC\u666F","children":[]},{"level":2,"title":"\u7528\u9014","slug":"\u7528\u9014","link":"#\u7528\u9014","children":[]},{"level":2,"title":"\u8BED\u8A00\u8981\u6C42","slug":"\u8BED\u8A00\u8981\u6C42","link":"#\u8BED\u8A00\u8981\u6C42","children":[]},{"level":2,"title":"\u7075\u611F\u6765\u6E90","slug":"\u7075\u611F\u6765\u6E90","link":"#\u7075\u611F\u6765\u6E90","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"zh-cn/guide/home.md"}');export{e as data}; diff --git a/docs/assets/home.html.817a2e55.js b/docs/assets/home.html.817a2e55.js deleted file mode 100644 index 82e49b2..0000000 --- a/docs/assets/home.html.817a2e55.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-64fc7bb8","path":"/en/api/home.html","title":"Document Introduce","lang":"en-US","frontmatter":{"next":{"text":"Public API","link":"/en/api/public/com/highcapable/yukireflection/YukiReflection"}},"excerpt":"","headers":[{"level":2,"title":"Function Description","slug":"function-description","link":"#function-description","children":[]},{"level":2,"title":"Function Example Description","slug":"function-example-description","link":"#function-example-description","children":[]},{"level":2,"title":"Change Record Description","slug":"change-record-description","link":"#change-record-description","children":[]},{"level":2,"title":"Related Symbols Description","slug":"related-symbols-description","link":"#related-symbols-description","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"en/api/home.md"}');export{e as data}; diff --git a/docs/assets/home.html.922e31fa.js b/docs/assets/home.html.922e31fa.js deleted file mode 100644 index 533ad5e..0000000 --- a/docs/assets/home.html.922e31fa.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c as i,a as c}from"./app.2add9aa5.js";const d={},t=c('

    \u6587\u6863\u4ECB\u7ECD

    \u8FD9\u91CC\u7684\u6587\u6863\u5C06\u540C\u6B65\u6700\u65B0 API \u7248\u672C\u7684\u76F8\u5173\u7528\u6CD5\uFF0C\u8BF7\u4FDD\u6301 YukiReflection \u4E3A\u6700\u65B0\u7248\u672C\u4EE5\u4F7F\u7528\u6700\u65B0\u7248\u672C\u7684\u529F\u80FD\u3002

    \u529F\u80FD\u63CF\u8FF0\u8BF4\u660E

    \u529F\u80FD\u63CF\u8FF0\u4E3B\u8981\u4ECB\u7ECD\u5F53\u524D API \u7684\u76F8\u5173\u7528\u6CD5\u548C\u7528\u9014\u3002

    \u529F\u80FD\u793A\u4F8B\u8BF4\u660E

    \u529F\u80FD\u793A\u4F8B\u4E3B\u8981\u5C55\u793A\u4E86\u5F53\u524D API \u7684\u57FA\u672C\u7528\u6CD5\u793A\u4F8B\uFF0C\u53EF\u4F9B\u53C2\u8003\u3002

    \u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E

    \u9996\u4E2A\u7248\u672C\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u6DFB\u52A0\uFF1B

    \u540E\u671F\u65B0\u589E\u52A0\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u65B0\u589E\uFF1B

    \u540E\u671F\u4FEE\u6539\u7684\u529F\u80FD\u5C06\u88AB\u8FFD\u52A0\u4E3A v<version> \u4FEE\u6539\uFF1B

    \u540E\u671F\u88AB\u4F5C\u5E9F\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u4F5C\u5E9F \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\uFF1B

    \u540E\u671F\u88AB\u5220\u9664\u7684\u529F\u80FD\u5C06\u6807\u8BB0\u4E3A v<version> \u79FB\u9664 \u5E76\u4F1A\u6807\u6CE8\u5220\u9664\u7EBF\u3002

    \u76F8\u5173\u7B26\u53F7\u8BF4\u660E

    • kt \xA0Kotlin Static File

    • annotation \xA0\u6CE8\u89E3

    • interface \xA0\u63A5\u53E3

    • object \xA0\u7C7B (\u5355\u4F8B)

    • class \xA0\u7C7B

    • field \xA0\u53D8\u91CF\u6216 get\u3001set \u65B9\u6CD5\u6216\u53EA\u8BFB\u7684 get \u65B9\u6CD5

    • method \xA0\u65B9\u6CD5

    • enum \xA0Enum \u5E38\u91CF

    • ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u5168\u5C40)

    • ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u5168\u5C40)

    • i-ext-field \xA0\u6269\u5C55\u7684\u53D8\u91CF (\u8C03\u7528\u57DF\u9650\u5236)

    • i-ext-method \xA0\u6269\u5C55\u7684\u65B9\u6CD5 (\u8C03\u7528\u57DF\u9650\u5236)

    ',14),l=[t];function a(p,r){return o(),i("div",null,l)}const h=e(d,[["render",a],["__file","home.html.vue"]]);export{h as default}; diff --git a/docs/assets/home.html.9b4cb86d.js b/docs/assets/home.html.9b4cb86d.js deleted file mode 100644 index 94b4775..0000000 --- a/docs/assets/home.html.9b4cb86d.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as i,r as l,o as d,c as p,b as e,d as s,w as t,a as c,e as o}from"./app.2add9aa5.js";const h={},_=c('

    \u4ECB\u7ECD

    YukiReflection \u662F\u4E00\u4E2A\u57FA\u4E8E Java \u548C Android \u5E73\u53F0\u7684\u53CD\u5C04 API\u3002

    \u80CC\u666F

    \u8FD9\u662F\u4E00\u4E2A\u4F7F\u7528 Kotlin \u57FA\u4E8E Java \u539F\u751F\u53CD\u5C04 API \u91CD\u65B0\u6253\u9020\u7684\u4E00\u5957\u7B80\u6D01\u3001\u9AD8\u6548\u7684\u53CD\u5C04 API\u3002

    ',4),u=e("code",null,"YukiReflection",-1),A=o(" \u540C\u65F6\u4E5F\u662F "),y={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},m=o("YukiHookAPI"),b=o(" \u6B63\u5728\u4F7F\u7528\u7684\u6838\u5FC3\u529F\u80FD\u3002"),C=o("\u540D\u79F0\u53D6\u81EA "),k={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},f=o("\u300A\u3082\u3082\u304F\u308A\u300B\u5973\u4E3B \u6817\u539F \u96EA(Yuki)"),D=o("\u3002"),B=e("h2",{id:"\u7528\u9014",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#\u7528\u9014","aria-hidden":"true"},"#"),o(" \u7528\u9014")],-1),F=e("p",null,[e("code",null,"YukiReflection"),o(" \u5B8C\u5168\u91C7\u7528 "),e("code",null,"Kotlin"),o(),e("code",null,"lambda"),o(" \u8BED\u6CD5\u6784\u5EFA\u3002")],-1),v=o("\u5B83\u80FD\u53D6\u4EE3 "),g={href:"https://pdai.tech/md/java/basic/java-basic-x-reflection.html",target:"_blank",rel:"noopener noreferrer"},x=o("Java \u539F\u751F\u7684\u53CD\u5C04 API"),I=o("\uFF0C\u4F7F\u7528\u66F4\u52A0\u4EBA\u6027\u5316\u7684\u8BED\u8A00\u5B9E\u73B0\u4E00\u5957\u66F4\u52A0\u5B8C\u5584\u7684\u53CD\u5C04\u65B9\u6848\u3002"),P=c('

    \u8BED\u8A00\u8981\u6C42

    \u8BF7\u4F7F\u7528 Kotlin\uFF0CAPI \u90E8\u5206\u4EE3\u7801\u6784\u6210\u540C\u6837\u517C\u5BB9 Java \u4F46\u57FA\u7840\u53CD\u5C04\u573A\u666F\u7684\u5B9E\u73B0\u53EF\u80FD\u5B8C\u5168\u65E0\u6CD5\u4F7F\u7528\u3002

    \u6587\u6863\u5168\u90E8\u7684 Demo \u793A\u4F8B\u4EE3\u7801\u90FD\u5C06\u4F7F\u7528 Kotlin \u8FDB\u884C\u63CF\u8FF0\uFF0C\u5982\u679C\u4F60\u5B8C\u5168\u4E0D\u4F1A\u4F7F\u7528 Kotlin \u90A3\u4F60\u5C06\u6709\u53EF\u80FD\u65E0\u6CD5\u4F7F\u7528 YukiReflection\u3002

    \u7075\u611F\u6765\u6E90

    ',4),Y=e("code",null,"YukiReflection",-1),R=o(" \u6700\u521D\u662F\u96C6\u6210\u5728 "),S={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},J=o("YukiHookAPI"),K=o(" \u9879\u76EE\u4E2D\u7684\u6838\u5FC3\u529F\u80FD\uFF0C\u73B0\u5728\u8FDB\u884C\u4E86\u89E3\u8026\u5408\uFF0C\u4F7F\u5F97\u8FD9\u5957\u53CD\u5C04 API \u53EF\u4EE5\u5728\u4EFB\u4F55 Java \u548C Android \u5E73\u53F0\u7684\u9879\u76EE\u4E2D\u4F7F\u7528\u3002"),w=e("p",null,"\u73B0\u5728\uFF0C\u6211\u4EEC\u53EA\u9700\u8981\u7F16\u5199\u5C11\u91CF\u7684\u4EE3\u7801\uFF0C\u5C31\u80FD\u5B9E\u73B0\u4E00\u4E2A\u7B80\u5355\u7684\u53CD\u5C04\u8C03\u7528\u3002",-1),N=e("p",null,[o("\u501F\u52A9 "),e("code",null,"Kotlin"),o(" \u4F18\u96C5\u7684 "),e("code",null,"lambda"),o(" \u5199\u6CD5\u4EE5\u53CA "),e("code",null,"YukiReflection"),o("\uFF0C\u53EF\u4EE5\u8BA9\u4F60\u7684\u53CD\u5C04\u903B\u8F91\u66F4\u52A0\u7F8E\u89C2\u6E05\u6670\u3002")],-1),j=e("blockquote",null,[e("p",null,"\u793A\u4F8B\u5982\u4E0B")],-1),G=e("div",{class:"language-kotlin ext-kt line-numbers-mode"},[e("pre",{class:"shiki",style:{"background-color":"#22272e"}},[e("code",null,[e("span",{class:"line"},[e("span",{style:{color:"#96D0FF"}},'"android.os.SystemProperties"'),e("span",{style:{color:"#ADBAC7"}},".toClass()")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .method {")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," name "),e("span",{style:{color:"#F47067"}},"="),e("span",{style:{color:"#ADBAC7"}}," "),e("span",{style:{color:"#96D0FF"}},'"get"')]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," param("),e("span",{style:{color:"#F69D50"}},"StringClass"),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#F69D50"}},"StringClass"),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," }.get().call("),e("span",{style:{color:"#96D0FF"}},'"ro.system.build.fingerprint"'),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"none"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"})])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),H=e("div",{class:"language-kotlin ext-kt line-numbers-mode"},[e("pre",{class:"shiki",style:{"background-color":"#22272e"}},[e("code",null,[e("span",{class:"line"},[e("span",{style:{color:"#F69D50"}},"Class"),e("span",{style:{color:"#ADBAC7"}},".forName("),e("span",{style:{color:"#96D0FF"}},'"android.os.SystemProperties"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .getDeclaredMethod("),e("span",{style:{color:"#96D0FF"}},'"get"'),e("span",{style:{color:"#ADBAC7"}},", String::"),e("span",{style:{color:"#6CB6FF"}},"class"),e("span",{style:{color:"#ADBAC7"}},".java, String::"),e("span",{style:{color:"#6CB6FF"}},"class"),e("span",{style:{color:"#ADBAC7"}},".java)")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," ."),e("span",{style:{color:"#6CB6FF"}},"apply"),e("span",{style:{color:"#ADBAC7"}}," { isAccessible "),e("span",{style:{color:"#F47067"}},"="),e("span",{style:{color:"#ADBAC7"}}," "),e("span",{style:{color:"#6CB6FF"}},"true"),e("span",{style:{color:"#ADBAC7"}}," }")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .invoke("),e("span",{style:{color:"#6CB6FF"}},"null"),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"ro.system.build.fingerprint"'),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"none"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"})])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1);function V(q,E){const n=l("ExternalLinkIcon"),a=l("CodeGroupItem"),r=l("CodeGroup");return d(),p("div",null,[_,e("p",null,[u,A,e("a",y,[m,s(n)]),b]),e("p",null,[C,e("a",k,[f,s(n)]),D]),B,F,e("p",null,[v,e("a",g,[x,s(n)]),I]),P,e("p",null,[Y,R,e("a",S,[J,s(n)]),K]),w,N,j,s(r,null,{default:t(()=>[s(a,{title:"Yuki Reflection"},{default:t(()=>[G]),_:1}),s(a,{title:"Java Reflection"},{default:t(()=>[H]),_:1})]),_:1})])}const M=i(h,[["render",V],["__file","home.html.vue"]]);export{M as default}; diff --git a/docs/assets/home.html.9c97a44a.js b/docs/assets/home.html.9c97a44a.js deleted file mode 100644 index a966f9b..0000000 --- a/docs/assets/home.html.9c97a44a.js +++ /dev/null @@ -1,10 +0,0 @@ -import{_ as r,r as l,o as d,c as u,b as e,d as n,w as t,a as i,e as o}from"./app.2add9aa5.js";const p={},h=i('

    Introduce

    YukiReflection is a Reflection API based on the Java and Android platform.

    Background

    This is a set of simple and efficient Reflection API rebuilt based on Java native Reflection API using Kotlin.

    ',4),_=e("code",null,"YukiReflection",-1),m=o(" is also the core functionality that "),f={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},y=o("YukiHookAPI"),A=o(" is using."),b=o("The name is taken from "),g={href:"https://www.bilibili.com/bangumi/play/ss5016",target:"_blank",rel:"noopener noreferrer"},k=o('"\u3082\u3082\u304F\u308A" heroine Yuki Kurihara'),C=o("."),D=e("h2",{id:"usage",tabindex:"-1"},[e("a",{class:"header-anchor",href:"#usage","aria-hidden":"true"},"#"),o(" Usage")],-1),B=e("p",null,[e("code",null,"YukiReflection"),o(" is fully built with "),e("code",null,"Kotlin"),o(),e("code",null,"lambda"),o(" syntax.")],-1),F=o("It can replace "),v={href:"https://www.oracle.com/technical-resources/articles/java/javareflection.html",target:"_blank",rel:"noopener noreferrer"},w=o("Java's native Reflection API"),I=o(" and implement a more complete reflection solution in a more human-friendly language."),x=i('

    Language Requirement

    Please use Kotlin, the code composition of the API part is also compatible with Java, but the implementation of the basic reflection scene may not be used at all.

    All Demo sample codes in the document will be described using Kotlin, if you don\u2019t know how to use Kotlin at all, you may not be able to use YukiReflection.

    Source of Inspiration

    ',4),R=e("code",null,"YukiReflection",-1),P=o(" was originally the core function integrated in the "),Y={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},S=o("YukiHookAPI"),K=o(" project, and now it is decoupled so that this Reflection API can be used in any Java and Android platform project."),j=e("p",null,"Now, we only need to write a small amount of code to implement a simple reflection call.",-1),q=e("p",null,[o("With "),e("code",null,"Kotlin"),o(" elegant "),e("code",null,"lambda"),o(" and "),e("code",null,"YukiReflection"),o(", you can make your reflection logic more beautiful and clear.")],-1),J=e("blockquote",null,[e("p",null,"The following example")],-1),N=e("div",{class:"language-kotlin ext-kt line-numbers-mode"},[e("pre",{class:"shiki",style:{"background-color":"#22272e"}},[e("code",null,[e("span",{class:"line"},[e("span",{style:{color:"#96D0FF"}},'"android.os.SystemProperties"'),e("span",{style:{color:"#ADBAC7"}},".toClass()")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .method {")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," name "),e("span",{style:{color:"#F47067"}},"="),e("span",{style:{color:"#ADBAC7"}}," "),e("span",{style:{color:"#96D0FF"}},'"get"')]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," param("),e("span",{style:{color:"#F69D50"}},"StringClass"),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#F69D50"}},"StringClass"),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," }.get().call("),e("span",{style:{color:"#96D0FF"}},'"ro.system.build.fingerprint"'),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"none"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"})])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1),G=e("div",{class:"language-kotlin ext-kt line-numbers-mode"},[e("pre",{class:"shiki",style:{"background-color":"#22272e"}},[e("code",null,[e("span",{class:"line"},[e("span",{style:{color:"#F69D50"}},"Class"),e("span",{style:{color:"#ADBAC7"}},".forName("),e("span",{style:{color:"#96D0FF"}},'"android.os.SystemProperties"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .getDeclaredMethod("),e("span",{style:{color:"#96D0FF"}},'"get"'),e("span",{style:{color:"#ADBAC7"}},", String::"),e("span",{style:{color:"#6CB6FF"}},"class"),e("span",{style:{color:"#ADBAC7"}},".java, String::"),e("span",{style:{color:"#6CB6FF"}},"class"),e("span",{style:{color:"#ADBAC7"}},".java)")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," ."),e("span",{style:{color:"#6CB6FF"}},"apply"),e("span",{style:{color:"#ADBAC7"}}," { isAccessible "),e("span",{style:{color:"#F47067"}},"="),e("span",{style:{color:"#ADBAC7"}}," "),e("span",{style:{color:"#6CB6FF"}},"true"),e("span",{style:{color:"#ADBAC7"}}," }")]),o(` -`),e("span",{class:"line"},[e("span",{style:{color:"#ADBAC7"}}," .invoke("),e("span",{style:{color:"#6CB6FF"}},"null"),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"ro.system.build.fingerprint"'),e("span",{style:{color:"#ADBAC7"}},", "),e("span",{style:{color:"#96D0FF"}},'"none"'),e("span",{style:{color:"#ADBAC7"}},")")]),o(` -`),e("span",{class:"line"})])]),e("div",{class:"line-numbers","aria-hidden":"true"},[e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"}),e("div",{class:"line-number"})])],-1);function H(T,V){const s=l("ExternalLinkIcon"),a=l("CodeGroupItem"),c=l("CodeGroup");return d(),u("div",null,[h,e("p",null,[_,m,e("a",f,[y,n(s)]),A]),e("p",null,[b,e("a",g,[k,n(s)]),C]),D,B,e("p",null,[F,e("a",v,[w,n(s)]),I]),x,e("p",null,[R,P,e("a",Y,[S,n(s)]),K]),j,q,J,n(c,null,{default:t(()=>[n(a,{title:"Yuki Reflection"},{default:t(()=>[N]),_:1}),n(a,{title:"Java Reflection"},{default:t(()=>[G]),_:1})]),_:1})])}const L=r(p,[["render",H],["__file","home.html.vue"]]);export{L as default}; diff --git a/docs/assets/home.html.a2b832f6.js b/docs/assets/home.html.a2b832f6.js deleted file mode 100644 index 4002d2b..0000000 --- a/docs/assets/home.html.a2b832f6.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c8deafb2","path":"/zh-cn/api/home.html","title":"\u6587\u6863\u4ECB\u7ECD","lang":"zh-CN","frontmatter":{"next":{"text":"Public API","link":"/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection"}},"excerpt":"","headers":[{"level":2,"title":"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E","slug":"\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E","link":"#\u529F\u80FD\u63CF\u8FF0\u8BF4\u660E","children":[]},{"level":2,"title":"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E","slug":"\u529F\u80FD\u793A\u4F8B\u8BF4\u660E","link":"#\u529F\u80FD\u793A\u4F8B\u8BF4\u660E","children":[]},{"level":2,"title":"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E","slug":"\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E","link":"#\u53D8\u66F4\u8BB0\u5F55\u8BF4\u660E","children":[]},{"level":2,"title":"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E","slug":"\u76F8\u5173\u7B26\u53F7\u8BF4\u660E","link":"#\u76F8\u5173\u7B26\u53F7\u8BF4\u660E","children":[]}],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"zh-cn/api/home.md"}');export{e as data}; diff --git a/docs/assets/home.html.eef2381c.js b/docs/assets/home.html.eef2381c.js deleted file mode 100644 index ea4a634..0000000 --- a/docs/assets/home.html.eef2381c.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-efb45d4c","path":"/en/guide/home.html","title":"Introduce","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Background","slug":"background","link":"#background","children":[]},{"level":2,"title":"Usage","slug":"usage","link":"#usage","children":[]},{"level":2,"title":"Language Requirement","slug":"language-requirement","link":"#language-requirement","children":[]},{"level":2,"title":"Source of Inspiration","slug":"source-of-inspiration","link":"#source-of-inspiration","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":3}]},"filePathRelative":"en/guide/home.md"}');export{e as data}; diff --git a/docs/assets/index.html.0336a74d.js b/docs/assets/index.html.0336a74d.js deleted file mode 100644 index 8a857dd..0000000 --- a/docs/assets/index.html.0336a74d.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-c0c85b84","path":"/zh-cn/","title":"\u9996\u9875","lang":"zh-CN","frontmatter":{"home":true,"title":"\u9996\u9875","heroImage":"/images/logo.png","actions":[{"text":"\u5FEB\u901F\u4E0A\u624B","link":"/zh-cn/guide/home","type":"primary"},{"text":"\u66F4\u65B0\u65E5\u5FD7","link":"/zh-cn/about/changelog","type":"secondary"}],"features":[{"title":"\u8F7B\u91CF\u4F18\u96C5","details":"\u62E5\u6709\u4E00\u5957\u5F3A\u5927\u3001\u4F18\u96C5\u3001\u4EBA\u6027\u5316\u3001\u5B8C\u5168\u4F7F\u7528 Kotlin lambda \u6253\u9020\u7684 API\uFF0C\u53EF\u4EE5\u5E2E\u4F60\u5FEB\u901F\u5B9E\u73B0\u5B57\u8282\u7801\u7684\u67E5\u627E\u4EE5\u53CA\u53CD\u5C04\u529F\u80FD\u3002"},{"title":"\u53EF\u8DE8\u5E73\u53F0","details":"\u4E0D\u4EC5\u4EC5\u662F Android \u5E73\u53F0\uFF0C\u5B83\u4E0E Java API \u9AD8\u5EA6\u517C\u5BB9\uFF0C\u53EF\u4F7F\u7528\u5728\u4EFB\u4F55 Kotlin on JVM \u7684\u9879\u76EE\u4E0A\uFF0C\u6709 Java \u7684\u5730\u65B9\u5C31\u53EF\u4EE5\u4F7F\u7528\u3002"},{"title":"\u5FEB\u901F\u4E0A\u624B","details":"\u7B80\u5355\u6613\u7528\uFF0C\u4E0D\u9700\u8981\u7E41\u7410\u7684\u914D\u7F6E\uFF0C\u4E0D\u9700\u8981\u5341\u8DB3\u7684\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u642D\u5EFA\u73AF\u5883\u96C6\u6210\u4F9D\u8D56\u5373\u53EF\u7ACB\u5373\u5F00\u59CB\u4F7F\u7528\u3002"}],"footer":"MIT License | Copyright (C) 2019-2023 HighCapable"},"excerpt":"","headers":[{"level":3,"title":"\u6765\u5427\uFF01\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F","slug":"\u6765\u5427-\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F","link":"#\u6765\u5427-\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/index.md"}');export{e as data}; diff --git a/docs/assets/index.html.1339d5c2.js b/docs/assets/index.html.1339d5c2.js deleted file mode 100644 index c3bf424..0000000 --- a/docs/assets/index.html.1339d5c2.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as s,o as n,c as a,a as l}from"./app.2add9aa5.js";const e={},o=l(`

    Bring it on! Let reflection become poetic and picturesque

    public class World {
    -
    -    private void sayHello(String content) {
    -        System.out.println("Hello " + content + "!");
    -    }
    -}
    -
    val newWorld = World()
    -classOf<World>().method {
    -    name = "sayHello"
    -    param(StringClass)
    -    type = UnitType
    -}.get(newWorld).call("YukiReflection")
    -
    `,3),p=[o];function c(t,r){return n(),a("div",null,p)}const d=s(e,[["render",c],["__file","index.html.vue"]]);export{d as default}; diff --git a/docs/assets/index.html.7c46b7b0.js b/docs/assets/index.html.7c46b7b0.js deleted file mode 100644 index e828df4..0000000 --- a/docs/assets/index.html.7c46b7b0.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-8daa1a0e","path":"/","title":"","lang":"en-US","frontmatter":{"home":true,"navbar":false,"sidebar":false,"title":null,"heroAlt":null,"heroText":null,"tagline":"Select a language","actions":[{"text":"English","link":"/en/","type":"secondary"},{"text":"\u7B80\u4F53\u4E2D\u6587","link":"/zh-cn/","type":"secondary"}],"footer":"MIT License | Copyright (C) 2019-2023 HighCapable"},"excerpt":"","headers":[],"git":{"updatedTime":1674666410000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":1}]},"filePathRelative":"index.md"}');export{e as data}; diff --git a/docs/assets/index.html.b541ea38.js b/docs/assets/index.html.b541ea38.js deleted file mode 100644 index 666fbb2..0000000 --- a/docs/assets/index.html.b541ea38.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-2d0a870d","path":"/en/","title":"Home","lang":"en-US","frontmatter":{"home":true,"title":"Home","heroImage":"/images/logo.png","actions":[{"text":"Get Started","link":"/en/guide/home","type":"primary"},{"text":"Changelog","link":"/en/about/changelog","type":"secondary"}],"features":[{"title":"Light and Elegant","details":"A powerful, elegant, beautiful API built with Kotlin lambda can help you quickly implement bytecode finding and reflection functions."},{"title":"Cross-Platform Available","details":"Not only the Android platform, it is highly compatible with the Java API and can be used on any Kotlin on JVM project, wherever Java is available."},{"title":"Quickly Started","details":"Simple and easy to use it now! Do not need complex configuration and full development experience, Integrate dependencies and enjoy yourself."}],"footer":"MIT License | Copyright (C) 2019-2023 HighCapable"},"excerpt":"","headers":[{"level":3,"title":"Bring it on! Let reflection become poetic and picturesque","slug":"bring-it-on-let-reflection-become-poetic-and-picturesque","link":"#bring-it-on-let-reflection-become-poetic-and-picturesque","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/index.md"}');export{e as data}; diff --git a/docs/assets/index.html.e2792c5f.js b/docs/assets/index.html.e2792c5f.js deleted file mode 100644 index fce95ef..0000000 --- a/docs/assets/index.html.e2792c5f.js +++ /dev/null @@ -1,13 +0,0 @@ -import{_ as s,o as n,c as a,a as l}from"./app.2add9aa5.js";const e={},o=l(`

    \u6765\u5427\uFF01\u8BA9\u53CD\u5C04\u4E5F\u53D8\u5F97\u8BD7\u60C5\u753B\u610F

    public class World {
    -
    -    private void sayHello(String content) {
    -        System.out.println("Hello " + content + "!");
    -    }
    -}
    -
    val newWorld = World()
    -classOf<World>().method {
    -    name = "sayHello"
    -    param(StringClass)
    -    type = UnitType
    -}.get(newWorld).call("YukiReflection")
    -
    `,3),p=[o];function c(r,t){return n(),a("div",null,p)}const d=s(e,[["render",c],["__file","index.html.vue"]]);export{d as default}; diff --git a/docs/assets/index.html.ed5036c6.js b/docs/assets/index.html.ed5036c6.js deleted file mode 100644 index 5d68c15..0000000 --- a/docs/assets/index.html.ed5036c6.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as c,c as t}from"./app.2add9aa5.js";const n={};function _(o,r){return c(),t("div")}const a=e(n,[["render",_],["__file","index.html.vue"]]);export{a as default}; diff --git a/docs/assets/quick-start.html.5cdc09d9.js b/docs/assets/quick-start.html.5cdc09d9.js deleted file mode 100644 index 6e23f0a..0000000 --- a/docs/assets/quick-start.html.5cdc09d9.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-24840ff0","path":"/zh-cn/guide/quick-start.html","title":"\u5FEB\u901F\u5F00\u59CB","lang":"zh-CN","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"\u73AF\u5883\u8981\u6C42","slug":"\u73AF\u5883\u8981\u6C42","link":"#\u73AF\u5883\u8981\u6C42","children":[]},{"level":2,"title":"\u9879\u76EE\u8981\u6C42","slug":"\u9879\u76EE\u8981\u6C42","link":"#\u9879\u76EE\u8981\u6C42","children":[{"level":3,"title":"\u96C6\u6210\u4F9D\u8D56","slug":"\u96C6\u6210\u4F9D\u8D56","link":"#\u96C6\u6210\u4F9D\u8D56","children":[]}]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"zh-cn/guide/quick-start.md"}');export{e as data}; diff --git a/docs/assets/quick-start.html.83b3f2af.js b/docs/assets/quick-start.html.83b3f2af.js deleted file mode 100644 index f25c1ad..0000000 --- a/docs/assets/quick-start.html.83b3f2af.js +++ /dev/null @@ -1,52 +0,0 @@ -import{_ as o,r as i,o as p,c,b as s,d as a,a as l,e as n}from"./app.2add9aa5.js";const r={},t=l('

    \u5FEB\u901F\u5F00\u59CB

    \u96C6\u6210 YukiReflection \u5230\u4F60\u7684\u9879\u76EE\u4E2D\u3002

    \u73AF\u5883\u8981\u6C42

    • Windows 7 \u53CA\u4EE5\u4E0A/macOS 10.14 \u53CA\u4EE5\u4E0A/Linux \u53D1\u884C\u7248 (Arch/Debian)

    • Android Studio 2021.1 \u53CA\u4EE5\u4E0A

    • IntelliJ IDEA 2021.1 \u53CA\u4EE5\u4E0A

    • Kotlin 1.7.0 \u53CA\u4EE5\u4E0A

    • Android Gradle Plugin 7.0 \u53CA\u4EE5\u4E0A

    • Gradle 7.0 \u53CA\u4EE5\u4E0A

    • Java 11 \u53CA\u4EE5\u4E0A

    \u9879\u76EE\u8981\u6C42

    \u9879\u76EE\u9700\u8981\u4F7F\u7528 Android Studio \u6216 IntelliJ IDEA \u521B\u5EFA\u4E14\u7C7B\u578B\u4E3A Java \u6216 Android \u9879\u76EE\u5E76\u5DF2\u96C6\u6210 Kotlin \u73AF\u5883\u4F9D\u8D56\u3002

    \u96C6\u6210\u4F9D\u8D56

    ',7),d=n("\u6211\u4EEC\u63A8\u8350\u4F7F\u7528 Kotlin DSL \u4F5C\u4E3A Gradle \u6784\u5EFA\u811A\u672C\u8BED\u8A00\u5E76\u63A8\u8350\u4F7F\u7528 "),u={href:"https://github.com/HighCapable/SweetDependency",target:"_blank",rel:"noopener noreferrer"},v=n("SweetDependency"),A=n(" \u6765\u7BA1\u7406\u4F9D\u8D56\u3002"),y=l(`

    SweetDependency \u65B9\u5F0F

    \u5728\u4F60\u7684\u9879\u76EE SweetDependency \u914D\u7F6E\u6587\u4EF6\u4E2D\u6DFB\u52A0\u5B58\u50A8\u5E93\u548C\u4F9D\u8D56\u3002

    \u793A\u4F8B\u5982\u4E0B

    repositories:
    -  # MavenCentral \u6709 2 \u5C0F\u65F6\u7F13\u5B58\uFF0C\u82E5\u65E0\u6CD5\u96C6\u6210\u6700\u65B0\u7248\u672C\u8BF7\u6DFB\u52A0
    -  sonatype-oss-releases:
    -
    -libraries:
    -  com.highcapable.yukireflection:
    -    api:
    -      version: +
    -  ...
    -

    \u6DFB\u52A0\u5B8C\u6210\u540E\u8FD0\u884C\u4E00\u6B21 Gradle Sync\uFF0C\u6240\u6709\u4F9D\u8D56\u7248\u672C\u5C06\u81EA\u52A8\u88C5\u914D\u3002

    \u63A5\u4E0B\u6765\uFF0C\u5728\u4F60\u7684\u9879\u76EE build.gradle.kts \u4E2D\u90E8\u7F72\u4F9D\u8D56\u3002

    \u793A\u4F8B\u5982\u4E0B

    dependencies {
    -    implementation(com.highcapable.yukireflection.api)
    -    // ...
    -}
    -

    \u4F20\u7EDF\u65B9\u5F0F (\u4E0D\u63A8\u8350)

    \u5728\u4F60\u7684\u9879\u76EE build.gradle.kts \u6216 build.gradle \u4E2D\u6DFB\u52A0\u5B58\u50A8\u5E93\u3002

    Kotlin DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral \u6709 2 \u5C0F\u65F6\u7F13\u5B58\uFF0C\u82E5\u65E0\u6CD5\u96C6\u6210\u6700\u65B0\u7248\u672C\u8BF7\u6DFB\u52A0\u6B64\u5730\u5740
    -    maven { url("https://s01.oss.sonatype.org/content/repositories/releases/") }
    -}
    -

    Groovy DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral \u6709 2 \u5C0F\u65F6\u7F13\u5B58\uFF0C\u82E5\u65E0\u6CD5\u96C6\u6210\u6700\u65B0\u7248\u672C\u8BF7\u6DFB\u52A0\u6B64\u5730\u5740
    -    maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
    -}
    -

    \u5728\u4F60\u7684\u9879\u76EE build.gradle.kts \u6216 build.gradle \u4E2D\u6DFB\u52A0\u4F9D\u8D56\u3002

    Kotlin DSL

    dependencies {
    -    implementation("com.highcapable.yukireflection:api:<yuki-version>")
    -    // ...
    -}
    -

    Groovy DSL

    dependencies {
    -    implementation 'com.highcapable.yukireflection:api:<yuki-version>'
    -    // ...
    -}
    -

    \u8BF7\u5C06 <yuki-version> \u4FEE\u6539\u4E3A \u8FD9\u91CC \u7684\u6700\u65B0\u7248\u672C\u3002

    `,20),b={class:"custom-container danger"},m=s("p",{class:"custom-container-title"},"\u7279\u522B\u6CE8\u610F",-1),h=n("\u5982\u679C\u4F60\u7684\u9879\u76EE\u76EE\u524D\u6B63\u5728\u4F7F\u7528 "),D={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},k=n("YukiHookAPI"),C=n(" \u7684 1.x.x \u7248\u672C\uFF0C\u8BF7\u4E0D\u8981\u91CD\u590D\u96C6\u6210 "),B=s("strong",null,"YukiReflection",-1),g=n("\uFF0C\u56E0\u4E3A "),_=s("strong",null,"YukiHookAPI",-1),f=n(" \u5DF2\u7ECF\u5305\u542B\u4E86\u5176\u4E2D\u7684\u529F\u80FD\u4E14\u5B58\u5728\u9488\u5BF9\u76F8\u5173\u529F\u80FD\u7684\u6539\u52A8\uFF0C\u91CD\u590D\u96C6\u6210\u4F1A\u9020\u6210\u529F\u80FD\u6027\u51B2\u7A81\u5F15\u53D1\u5F02\u5E38\uFF0C\u6B64\u65F6\u4F60\u5E94\u8BE5\u524D\u5F80 "),F=s("strong",null,"YukiHookAPI",-1),q=n(" \u7684 "),x={href:"https://fankes.github.io/YukiHookAPI/zh-cn/",target:"_blank",rel:"noopener noreferrer"},S=n("\u6587\u6863"),I=n(" \u67E5\u770B\u5BF9\u5E94\u7684\u4F7F\u7528\u6559\u7A0B\u3002"),V=s("p",null,[s("strong",null,"YukiHookAPI"),n(" \u5C06\u5728 2.x.x \u7248\u672C\u5B8C\u5168\u5206\u79BB "),s("strong",null,"YukiReflection"),n("\uFF0C\u5C4A\u65F6\u4F60\u53EF\u4EE5\u540C\u65F6\u4E0E "),s("strong",null,"YukiHookAPI"),n(" \u4F7F\u7528\u3002")],-1),J=l(`

    \u914D\u7F6E Java \u7248\u672C

    \u5728\u4F60\u7684\u9879\u76EE build.gradle.kts \u6216 build.gradle \u4E2D\u4FEE\u6539 Kotlin \u7684 Java \u7248\u672C\u4E3A 11 \u53CA\u4EE5\u4E0A\u3002

    Kotlin DSL

    android {
    -    compileOptions {
    -        sourceCompatibility = JavaVersion.VERSION_11
    -        targetCompatibility = JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = "11"
    -    }
    -}
    -

    Groovy DSL

    android {
    -    compileOptions {
    -        sourceCompatibility JavaVersion.VERSION_11
    -        targetCompatibility JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = '11'
    -    }
    -}
    -
    `,6);function L(Y,E){const e=i("ExternalLinkIcon");return p(),c("div",null,[t,s("p",null,[d,s("a",u,[v,a(e)]),A]),y,s("div",b,[m,s("p",null,[h,s("a",D,[k,a(e)]),C,B,g,_,f,F,q,s("a",x,[S,a(e)]),I]),V]),J])}const H=o(r,[["render",L],["__file","quick-start.html.vue"]]);export{H as default}; diff --git a/docs/assets/quick-start.html.a839f1ea.js b/docs/assets/quick-start.html.a839f1ea.js deleted file mode 100644 index adb884f..0000000 --- a/docs/assets/quick-start.html.a839f1ea.js +++ /dev/null @@ -1,53 +0,0 @@ -import{_ as o,r as i,o as t,c,b as s,d as a,a as l,e}from"./app.2add9aa5.js";const p={},r=l('

    Quick Start

    Integrate YukiReflection into your project.

    Environment Requirements

    • Windows 7 and above / macOS 10.14 and above / Linux distributions (Arch/Debian)

    • Android Studio 2021.1 and above

    • IntelliJ IDEA 2021.1 and above

    • Kotlin 1.7.0 and above

    • Android Gradle Plugin 7.0 and above

    • Gradle 7.0 and above

    • Java 11 and above

    Project Requirements

    The project needs to be created using Android Studio or IntelliJ IDEA and the type is an Java or Android project and the Kotlin environment dependency has been integrated.

    Integration Dependencies

    ',7),d=e("We recommend using Kotlin DSL as the Gradle build script language and "),u={href:"https://github.com/HighCapable/SweetDependency",target:"_blank",rel:"noopener noreferrer"},v=e("SweetDependency"),y=e(" to manage dependencies."),h=l(`

    SweetDependency Method

    Add the repositories and dependencies in your project's SweetDependency configuration file.

    The following example

    repositories:
    -  # MavenCentral has a 2-hour cache,
    -  # if the latest version cannot be integrated, please add this
    -  sonatype-oss-releases:
    -
    -libraries:
    -  com.highcapable.yukireflection:
    -    api:
    -      version: +
    -  ...
    -

    After adding it, run Gradle Sync and all dependencies will be autowired.

    Next, deploy dependencies in your project build.gradle.kts.

    The following example

    dependencies {
    -    implementation(com.highcapable.yukireflection.api)
    -    // ...
    -}
    -

    Add repositories in your project build.gradle.kts or build.gradle.

    Kotlin DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
    -    maven { url("https://s01.oss.sonatype.org/content/repositories/releases/") }
    -}
    -

    Groovy DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
    -    maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
    -}
    -

    Add dependencies in your project build.gradle.kts or build.gradle.

    Kotlin DSL

    dependencies {
    -    implementation("com.highcapable.yukireflection:api:<yuki-version>")
    -    // ...
    -}
    -

    Groovy DSL

    dependencies {
    -    implementation 'com.highcapable.yukireflection:api:<yuki-version>'
    -    // ...
    -}
    -

    Please change <yuki-version> to the latest version here.

    `,20),b={class:"custom-container danger"},A=s("p",{class:"custom-container-title"},"Pay Attention",-1),m=e("If your project is currently using the 1.x.x version of "),D={href:"https://github.com/fankes/YukiHookAPI",target:"_blank",rel:"noopener noreferrer"},g=e("YukiHookAPI"),k=e(", please do not integrate "),C=s("strong",null,"YukiReflection",-1),B=e(" repeatedly, because "),_=s("strong",null,"YukiHookAPI",-1),f=e(" already includes it functions and there are changes to related functions."),q=s("p",null,"Repeated integration will cause functional conflicts and cause exceptions.",-1),x=e("In this case, you should go to the "),F={href:"https://fankes.github.io/YukiHookAPI/zh-cn/",target:"_blank",rel:"noopener noreferrer"},S=e("Documentation"),I=e(" of "),j=s("strong",null,"YukiHookAPI",-1),w=e(" view the corresponding usage tutorial."),R=s("p",null,[s("strong",null,"YukiHookAPI"),e(" will be completely separated from "),s("strong",null,"YukiReflection"),e(" in version 2.x.x, by which time you can use it with "),s("strong",null,"YukiHookAPI"),e(" at the same time.")],-1),V=l(`

    Configure Java Version

    Modify the Java version of Kotlin in your project build.gradle.kts or build.gradle to 11 or above.

    Kotlin DSL

    android {
    -    compileOptions {
    -        sourceCompatibility = JavaVersion.VERSION_11
    -        targetCompatibility = JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = "11"
    -    }
    -}
    -

    Groovy DSL

    android {
    -    compileOptions {
    -        sourceCompatibility JavaVersion.VERSION_11
    -        targetCompatibility JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = '11'
    -    }
    -}
    -
    `,6);function L(P,E){const n=i("ExternalLinkIcon");return t(),c("div",null,[r,s("p",null,[d,s("a",u,[v,a(n)]),y]),h,s("div",b,[A,s("p",null,[m,s("a",D,[g,a(n)]),k,C,B,_,f]),q,s("p",null,[x,s("a",F,[S,a(n)]),I,j,w]),R]),V])}const N=o(p,[["render",L],["__file","quick-start.html.vue"]]);export{N as default}; diff --git a/docs/assets/quick-start.html.cdfe78bb.js b/docs/assets/quick-start.html.cdfe78bb.js deleted file mode 100644 index 9decd24..0000000 --- a/docs/assets/quick-start.html.cdfe78bb.js +++ /dev/null @@ -1 +0,0 @@ -const e=JSON.parse('{"key":"v-72889797","path":"/en/guide/quick-start.html","title":"Quick Start","lang":"en-US","frontmatter":{},"excerpt":"","headers":[{"level":2,"title":"Environment Requirements","slug":"environment-requirements","link":"#environment-requirements","children":[]},{"level":2,"title":"Project Requirements","slug":"project-requirements","link":"#project-requirements","children":[]},{"level":2,"title":"Integration Dependencies","slug":"integration-dependencies","link":"#integration-dependencies","children":[]}],"git":{"updatedTime":1695391160000,"contributors":[{"name":"fankesyooni","email":"qzmmcn@163.com","commits":2}]},"filePathRelative":"en/guide/quick-start.md"}');export{e as data}; diff --git a/docs/assets/search.0782d0d1.svg b/docs/assets/search.0782d0d1.svg deleted file mode 100644 index 03d8391..0000000 --- a/docs/assets/search.0782d0d1.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/assets/style.7c106af9.css b/docs/assets/style.7c106af9.css deleted file mode 100644 index 3ae8c7e..0000000 --- a/docs/assets/style.7c106af9.css +++ /dev/null @@ -1 +0,0 @@ -:root{--back-to-top-z-index: 5;--back-to-top-color: #3eaf7c;--back-to-top-color-hover: #71cda3}.back-to-top{cursor:pointer;position:fixed;bottom:2rem;right:2.5rem;width:2rem;height:1.2rem;background-color:var(--back-to-top-color);-webkit-mask:url(/YukiReflection/assets/back-to-top.8efcbe56.svg) no-repeat;mask:url(/YukiReflection/assets/back-to-top.8efcbe56.svg) no-repeat;z-index:var(--back-to-top-z-index)}.back-to-top:hover{background-color:var(--back-to-top-color-hover)}@media (max-width: 959px){.back-to-top{display:none}}.back-to-top-enter-active,.back-to-top-leave-active{transition:opacity .3s}.back-to-top-enter-from,.back-to-top-leave-to{opacity:0}:root{--external-link-icon-color: #aaa}.external-link-icon{position:relative;display:inline-block;color:var(--external-link-icon-color);vertical-align:middle;top:-1px}.external-link-icon-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--medium-zoom-z-index: 100;--medium-zoom-bg-color: #ffffff;--medium-zoom-opacity: 1}.medium-zoom-overlay{background-color:var(--medium-zoom-bg-color)!important;z-index:var(--medium-zoom-z-index)}.medium-zoom-overlay~img{z-index:calc(var(--medium-zoom-z-index) + 1)}.medium-zoom--opened .medium-zoom-overlay{opacity:var(--medium-zoom-opacity)}:root{--nprogress-color: #29d;--nprogress-z-index: 1031}#nprogress{pointer-events:none}#nprogress .bar{background:var(--nprogress-color);position:fixed;z-index:var(--nprogress-z-index);top:0;left:0;width:100%;height:2px}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a;--c-bg: #ffffff;--c-bg-light: #f3f4f5;--c-bg-lighter: #eeeeee;--c-bg-navbar: var(--c-bg);--c-bg-sidebar: var(--c-bg);--c-bg-arrow: #cccccc;--c-text: #2c3e50;--c-text-accent: var(--c-brand);--c-text-light: #3a5169;--c-text-lighter: #4e6e8e;--c-text-lightest: #6a8bad;--c-text-quote: #999999;--c-border: #eaecef;--c-border-dark: #dfe2e5;--c-tip: #42b983;--c-tip-bg: var(--c-bg-light);--c-tip-title: var(--c-text);--c-tip-text: var(--c-text);--c-tip-text-accent: var(--c-text-accent);--c-warning: #e7c000;--c-warning-bg: #fffae3;--c-warning-title: #ad9000;--c-warning-text: #746000;--c-warning-text-accent: var(--c-text);--c-danger: #cc0000;--c-danger-bg: #ffe0e0;--c-danger-title: #990000;--c-danger-text: #660000;--c-danger-text-accent: var(--c-text);--c-details-bg: #eeeeee;--c-badge-tip: var(--c-tip);--c-badge-warning: var(--c-warning);--c-badge-danger: var(--c-danger);--t-color: .3s ease;--t-transform: .3s ease;--code-bg-color: #282c34;--code-hl-bg-color: rgba(0, 0, 0, .66);--code-ln-color: #9e9e9e;--code-ln-wrapper-width: 3.5rem;--font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;--font-family-code: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;--navbar-height: 3.6rem;--navbar-padding-v: .7rem;--navbar-padding-h: 1.5rem;--sidebar-width: 20rem;--sidebar-width-mobile: calc(var(--sidebar-width) * .82);--content-width: 740px;--homepage-width: 960px}.back-to-top{--back-to-top-color: var(--c-brand);--back-to-top-color-hover: var(--c-brand-light)}.DocSearch{--docsearch-primary-color: var(--c-brand);--docsearch-text-color: var(--c-text);--docsearch-highlight-color: var(--c-brand);--docsearch-muted-color: var(--c-text-quote);--docsearch-container-background: rgba(9, 10, 17, .8);--docsearch-modal-background: var(--c-bg-light);--docsearch-searchbox-background: var(--c-bg-lighter);--docsearch-searchbox-focus-background: var(--c-bg);--docsearch-searchbox-shadow: inset 0 0 0 2px var(--c-brand);--docsearch-hit-color: var(--c-text-light);--docsearch-hit-active-color: var(--c-bg);--docsearch-hit-background: var(--c-bg);--docsearch-hit-shadow: 0 1px 3px 0 var(--c-border-dark);--docsearch-footer-background: var(--c-bg)}.external-link-icon{--external-link-icon-color: var(--c-text-quote)}.medium-zoom-overlay{--medium-zoom-bg-color: var(--c-bg)}#nprogress{--nprogress-color: var(--c-brand)}.pwa-popup{--pwa-popup-text-color: var(--c-text);--pwa-popup-bg-color: var(--c-bg);--pwa-popup-border-color: var(--c-brand);--pwa-popup-shadow: 0 4px 16px var(--c-brand);--pwa-popup-btn-text-color: var(--c-bg);--pwa-popup-btn-bg-color: var(--c-brand);--pwa-popup-btn-hover-bg-color: var(--c-brand-light)}.search-box{--search-bg-color: var(--c-bg);--search-accent-color: var(--c-brand);--search-text-color: var(--c-text);--search-border-color: var(--c-border);--search-item-text-color: var(--c-text-lighter);--search-item-focus-bg-color: var(--c-bg-light)}html.dark{--c-brand: #3aa675;--c-brand-light: #349469;--c-bg: #22272e;--c-bg-light: #2b313a;--c-bg-lighter: #262c34;--c-text: #adbac7;--c-text-light: #96a7b7;--c-text-lighter: #8b9eb0;--c-text-lightest: #8094a8;--c-border: #3e4c5a;--c-border-dark: #34404c;--c-tip: #318a62;--c-warning: #ceab00;--c-warning-bg: #7e755b;--c-warning-title: #ceac03;--c-warning-text: #362e00;--c-danger: #940000;--c-danger-bg: #806161;--c-danger-title: #610000;--c-danger-text: #3a0000;--c-details-bg: #323843;--code-hl-bg-color: #363b46}html.dark .DocSearch{--docsearch-logo-color: var(--c-text);--docsearch-modal-shadow: inset 1px 1px 0 0 #2c2e40, 0 3px 8px 0 #000309;--docsearch-key-shadow: inset 0 -2px 0 0 #282d55, inset 0 0 1px 1px #51577d, 0 2px 2px 0 rgba(3, 4, 9, .3);--docsearch-key-gradient: linear-gradient(-225deg, #444950, #1c1e21);--docsearch-footer-shadow: inset 0 1px 0 0 rgba(73, 76, 106, .5), 0 -4px 8px 0 rgba(0, 0, 0, .2)}html,body{padding:0;margin:0;background-color:var(--c-bg);transition:background-color var(--t-color)}html.dark{color-scheme:dark}html{font-size:16px}body{font-family:var(--font-family);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:1rem;color:var(--c-text)}a{font-weight:500;color:var(--c-text-accent);text-decoration:none;overflow-wrap:break-word}p a code{font-weight:400;color:var(--c-text-accent)}kbd{font-family:var(--font-family-code);color:var(--c-text);background:var(--c-bg-lighter);border:solid .15rem var(--c-border-dark);border-bottom:solid .25rem var(--c-border-dark);border-radius:.15rem;padding:0 .15em}code{font-family:var(--font-family-code);color:var(--c-text-lighter);padding:.25rem .5rem;margin:0;font-size:.85em;background-color:var(--c-bg-lighter);border-radius:3px;overflow-wrap:break-word;transition:background-color var(--t-color)}blockquote{font-size:1rem;color:var(--c-text-quote);border-left:.2rem solid var(--c-border-dark);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ul,ol{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}h1:focus-visible,h2:focus-visible,h3:focus-visible,h4:focus-visible,h5:focus-visible,h6:focus-visible{outline:none}h1:hover .header-anchor,h2:hover .header-anchor,h3:hover .header-anchor,h4:hover .header-anchor,h5:hover .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color)}h3{font-size:1.35rem}h4{font-size:1.15rem}h5{font-size:1.05rem}h6{font-size:1rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}a.header-anchor:hover{text-decoration:none}a.header-anchor:focus-visible{opacity:1}p,ul,ol{line-height:1.7}hr{border:0;border-top:1px solid var(--c-border)}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto;transition:border-color var(--t-color)}tr{border-top:1px solid var(--c-border-dark);transition:border-color var(--t-color)}tr:nth-child(2n){background-color:var(--c-bg-light);transition:background-color var(--t-color)}th,td{padding:.6em 1em;border:1px solid var(--c-border-dark);transition:border-color var(--t-color)}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:6px solid var(--c-bg-arrow)}.arrow.down{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid var(--c-bg-arrow)}.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--c-bg-arrow)}.arrow.left{border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:6px solid var(--c-bg-arrow)}.badge{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:var(--c-bg);vertical-align:top;transition:color var(--t-color),background-color var(--t-color)}.badge.tip{background-color:var(--c-badge-tip)}.badge.warning{background-color:var(--c-badge-warning)}.badge.danger{background-color:var(--c-badge-danger)}.badge+.badge{margin-left:5px}code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:var(--font-family-code);font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#ec5975}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.3rem 1.5rem;margin:.85rem 0;border-radius:6px;overflow:auto}.theme-default-content pre code,.theme-default-content pre[class*=language-] code{color:#fff;padding:0;background-color:transparent;border-radius:0;overflow-wrap:unset;-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.theme-default-content .line-number{font-family:var(--font-family-code)}div[class*=language-]{position:relative;background-color:var(--code-bg-color);border-radius:6px}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:var(--code-ln-color)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent!important;position:relative;z-index:1}div[class*=language-] .highlight-lines{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlight-line{background-color:var(--code-hl-bg-color)}div[class*=language-]:not(.line-numbers-mode) .line-numbers{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlight-line:before{content:" ";position:absolute;z-index:2;left:0;top:0;display:block;width:var(--code-ln-wrapper-width);height:100%}div[class*=language-].line-numbers-mode pre{margin-left:var(--code-ln-wrapper-width);padding-left:1rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers{position:absolute;top:0;width:var(--code-ln-wrapper-width);text-align:center;color:var(--code-ln-color);padding-top:1.25rem;line-height:1.4;counter-reset:line-number}div[class*=language-].line-numbers-mode .line-numbers .line-number{position:relative;z-index:3;-webkit-user-select:none;-moz-user-select:none;user-select:none;height:1.4em}div[class*=language-].line-numbers-mode .line-numbers .line-number:before{counter-increment:line-number;content:counter(line-number);font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;top:0;left:0;width:var(--code-ln-wrapper-width);height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--code-hl-bg-color)}div[class*=language-].ext-c:before{content:"c"}div[class*=language-].ext-cpp:before{content:"cpp"}div[class*=language-].ext-cs:before{content:"cs"}div[class*=language-].ext-css:before{content:"css"}div[class*=language-].ext-dart:before{content:"dart"}div[class*=language-].ext-docker:before{content:"docker"}div[class*=language-].ext-fs:before{content:"fs"}div[class*=language-].ext-go:before{content:"go"}div[class*=language-].ext-html:before{content:"html"}div[class*=language-].ext-java:before{content:"java"}div[class*=language-].ext-js:before{content:"js"}div[class*=language-].ext-json:before{content:"json"}div[class*=language-].ext-kt:before{content:"kt"}div[class*=language-].ext-less:before{content:"less"}div[class*=language-].ext-makefile:before{content:"makefile"}div[class*=language-].ext-md:before{content:"md"}div[class*=language-].ext-php:before{content:"php"}div[class*=language-].ext-py:before{content:"py"}div[class*=language-].ext-rb:before{content:"rb"}div[class*=language-].ext-rs:before{content:"rs"}div[class*=language-].ext-sass:before{content:"sass"}div[class*=language-].ext-scss:before{content:"scss"}div[class*=language-].ext-sh:before{content:"sh"}div[class*=language-].ext-styl:before{content:"styl"}div[class*=language-].ext-ts:before{content:"ts"}div[class*=language-].ext-toml:before{content:"toml"}div[class*=language-].ext-vue:before{content:"vue"}div[class*=language-].ext-yml:before{content:"yml"}@media (max-width: 419px){.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}.code-group__nav{margin-top:.85rem;margin-bottom:calc(-1.7rem - 6px);padding-bottom:calc(1.7rem - 6px);padding-left:10px;padding-top:10px;border-top-left-radius:6px;border-top-right-radius:6px;background-color:var(--code-bg-color)}.code-group__ul{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.code-group__nav-tab{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:#ffffffe6;font-weight:600}.code-group__nav-tab:focus{outline:none}.code-group__nav-tab:focus-visible{outline:1px solid rgba(255,255,255,.9)}.code-group__nav-tab-active{border-bottom:var(--c-brand) 1px solid}@media (max-width: 419px){.code-group__nav{margin-left:-1.5rem;margin-right:-1.5rem;border-radius:0}}.code-group-item{display:none}.code-group-item__active{display:block}.code-group-item>pre{background-color:orange}.custom-container{transition:color var(--t-color),border-color var(--t-color),background-color var(--t-color)}.custom-container .custom-container-title{font-weight:600}.custom-container .custom-container-title:not(:only-child){margin-bottom:-.4rem}.custom-container.tip,.custom-container.warning,.custom-container.danger{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-container.tip{border-color:var(--c-tip);background-color:var(--c-tip-bg);color:var(--c-tip-text)}.custom-container.tip .custom-container-title{color:var(--c-tip-title)}.custom-container.tip a{color:var(--c-tip-text-accent)}.custom-container.warning{border-color:var(--c-warning);background-color:var(--c-warning-bg);color:var(--c-warning-text)}.custom-container.warning .custom-container-title{color:var(--c-warning-title)}.custom-container.warning a{color:var(--c-warning-text-accent)}.custom-container.danger{border-color:var(--c-danger);background-color:var(--c-danger-bg);color:var(--c-danger-text)}.custom-container.danger .custom-container-title{color:var(--c-danger-title)}.custom-container.danger a{color:var(--c-danger-text-accent)}.custom-container.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:var(--c-details-bg)}.custom-container.details h4{margin-top:0}.custom-container.details figure:last-child,.custom-container.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-container.details summary{outline:none;cursor:pointer}.home{padding:var(--navbar-height) 2rem 0;max-width:var(--homepage-width);margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.8rem auto}.home .hero .actions{display:flex;flex-wrap:wrap;gap:1rem;justify-content:center}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:var(--c-text-lightest)}.home .hero .action-button{display:inline-block;font-size:1.2rem;padding:.8rem 1.6rem;border-width:2px;border-style:solid;border-radius:4px;transition:background-color var(--t-color);box-sizing:border-box}.home .hero .action-button.primary{color:var(--c-bg);background-color:var(--c-brand);border-color:var(--c-brand)}.home .hero .action-button.primary:hover{background-color:var(--c-brand-light)}.home .hero .action-button.secondary{color:var(--c-brand);background-color:var(--c-bg);border-color:var(--c-brand)}.home .hero .action-button.secondary:hover{color:var(--c-bg);background-color:var(--c-brand-light)}.home .features{border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:var(--c-text-light)}.home .feature p{color:var(--c-text-lighter)}.home .theme-default-content{padding:0;margin:0}.home .footer{padding:2.5rem;border-top:1px solid var(--c-border);text-align:center;color:var(--c-text-lighter);transition:border-color var(--t-color)}@media (max-width: 719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width: 419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero h1,.home .hero .description,.home .hero .actions{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.page{padding-top:var(--navbar-height);padding-left:var(--sidebar-width)}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:var(--navbar-height);box-sizing:border-box;border-bottom:1px solid var(--c-border);background-color:var(--c-bg-navbar);transition:background-color var(--t-color),border-color var(--t-color)}.sidebar{font-size:16px;width:var(--sidebar-width);position:fixed;z-index:10;margin:0;top:var(--navbar-height);left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--c-border);overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-brand) var(--c-border);background-color:var(--c-bg-sidebar);transition:transform var(--t-transform),background-color var(--t-color),border-color var(--t-color)}.sidebar::-webkit-scrollbar{width:7px}.sidebar::-webkit-scrollbar-track{background-color:var(--c-border)}.sidebar::-webkit-scrollbar-thumb{background-color:var(--c-brand)}.sidebar-mask{position:fixed;z-index:9;top:0;left:0;width:100vw;height:100vh;display:none}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1){transform:rotate(45deg) translate3d(5.5px,5.5px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(2){transform:scale3d(0,1,1)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform:rotate(-45deg) translate3d(6px,-6px,0)}.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(1),.theme-container.sidebar-open .navbar>.toggle-sidebar-button .icon span:nth-child(3){transform-origin:center}.theme-container.no-navbar .theme-default-content h1,.theme-container.no-navbar .theme-default-content h2,.theme-container.no-navbar .theme-default-content h3,.theme-container.no-navbar .theme-default-content h4,.theme-container.no-navbar .theme-default-content h5,.theme-container.no-navbar .theme-default-content h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .page{padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width: 720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}.theme-default-content a:hover{text-decoration:underline}.theme-default-content img{max-width:100%}.theme-default-content h1,.theme-default-content h2,.theme-default-content h3,.theme-default-content h4,.theme-default-content h5,.theme-default-content h6{margin-top:calc(.5rem - var(--navbar-height));padding-top:calc(1rem + var(--navbar-height));margin-bottom:0}.theme-default-content h1:first-child,.theme-default-content h2:first-child,.theme-default-content h3:first-child,.theme-default-content h4:first-child,.theme-default-content h5:first-child,.theme-default-content h6:first-child{margin-bottom:1rem}.theme-default-content h1:first-child+p,.theme-default-content h1:first-child+pre,.theme-default-content h1:first-child+.custom-container,.theme-default-content h2:first-child+p,.theme-default-content h2:first-child+pre,.theme-default-content h2:first-child+.custom-container,.theme-default-content h3:first-child+p,.theme-default-content h3:first-child+pre,.theme-default-content h3:first-child+.custom-container,.theme-default-content h4:first-child+p,.theme-default-content h4:first-child+pre,.theme-default-content h4:first-child+.custom-container,.theme-default-content h5:first-child+p,.theme-default-content h5:first-child+pre,.theme-default-content h5:first-child+.custom-container,.theme-default-content h6:first-child+p,.theme-default-content h6:first-child+pre,.theme-default-content h6:first-child+.custom-container{margin-top:2rem}@media (max-width: 959px){.sidebar{font-size:15px;width:var(--sidebar-width-mobile)}.page{padding-left:var(--sidebar-width-mobile)}}@media (max-width: 719px){.sidebar{top:0;padding-top:var(--navbar-height);transform:translate(-100%)}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translate(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width: 419px){h1{font-size:1.9rem}}.navbar{--navbar-line-height: calc( var(--navbar-height) - 2 * var(--navbar-padding-v) );padding:var(--navbar-padding-v) var(--navbar-padding-h);line-height:var(--navbar-line-height)}.navbar .logo{height:var(--navbar-line-height);margin-right:var(--navbar-padding-v);vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--c-text);position:relative}.navbar .navbar-items-wrapper{display:flex;position:absolute;box-sizing:border-box;top:var(--navbar-padding-v);right:var(--navbar-padding-h);height:var(--navbar-line-height);padding-left:var(--navbar-padding-h);white-space:nowrap;font-size:.9rem}.navbar .navbar-items-wrapper .search-box{flex:0 0 auto;vertical-align:top}@media (max-width: 719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.navbar-items{display:inline-block}.navbar-items a{display:inline-block;line-height:1.4rem;color:inherit}.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text-accent)}.navbar-items .navbar-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:var(--navbar-line-height)}.navbar-items .navbar-item:first-child{margin-left:0}@media (max-width: 719px){.navbar-items .navbar-item{margin-left:0}}@media (min-width: 719px){.navbar-items a:hover,.navbar-items a.router-link-active{color:var(--c-text)}.navbar-item>a:hover,.navbar-item>a.router-link-active{margin-bottom:-2px;border-bottom:2px solid var(--c-text-accent)}}.toggle-sidebar-button{position:absolute;top:.6rem;left:1rem;display:none;padding:.6rem;cursor:pointer}.toggle-sidebar-button .icon{display:flex;flex-direction:column;justify-content:center;align-items:center;width:1.25rem;height:1.25rem;cursor:inherit}.toggle-sidebar-button .icon span{display:inline-block;width:100%;height:2px;border-radius:2px;background-color:var(--c-text);transition:transform var(--t-transform)}.toggle-sidebar-button .icon span:nth-child(2){margin:6px 0}@media screen and (max-width: 719px){.toggle-sidebar-button{display:block}}.toggle-color-mode-button{display:flex;margin:auto;margin-left:1rem;border:0;background:none;color:var(--c-text);opacity:.8;cursor:pointer}.toggle-color-mode-button:hover{opacity:1}.toggle-color-mode-button .icon{width:1.25rem;height:1.25rem}.DocSearch{transition:background-color var(--t-color)}.navbar-dropdown-wrapper{cursor:pointer}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--c-text)}.navbar-dropdown-wrapper .navbar-dropdown-title:hover,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{border-color:transparent}.navbar-dropdown-wrapper .navbar-dropdown-title .arrow,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none;font-weight:600;font-size:inherit}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile:hover{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item{color:inherit;line-height:1.7rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{margin:.45rem 0 0;border-top:1px solid var(--c-border);padding:1rem 0 .45rem;font-size:.9rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>span{padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a{font-weight:inherit}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle>a.router-link-active:after{display:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper{padding:0;list-style:none}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem-wrapper .navbar-dropdown-subitem{font-size:.9em}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a:hover,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active{color:var(--c-text-accent)}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid var(--c-text-accent);border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item:first-child .navbar-dropdown-subtitle{margin-top:0;padding-top:0;border-top:0}@media (max-width: 719px){.navbar-dropdown-wrapper.open .navbar-dropdown-title,.navbar-dropdown-wrapper.open .navbar-dropdown-title-mobile{margin-bottom:.5rem}.navbar-dropdown-wrapper .navbar-dropdown-title,.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:none}.navbar-dropdown-wrapper .navbar-dropdown-title-mobile{display:block}.navbar-dropdown-wrapper .navbar-dropdown{transition:height .1s ease-out;overflow:hidden}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle{border-top:0;margin-top:0;padding-top:0;padding-bottom:0}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subtitle,.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item>a{font-size:15px;line-height:2rem}.navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item .navbar-dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width: 720px){.navbar-dropdown-wrapper{height:1.8rem}.navbar-dropdown-wrapper:hover .navbar-dropdown,.navbar-dropdown-wrapper.open .navbar-dropdown{display:block!important}.navbar-dropdown-wrapper.open:blur{display:none}.navbar-dropdown-wrapper .navbar-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--c-bg-navbar);padding:.6rem 0;border:1px solid var(--c-border);border-bottom-color:var(--c-border-dark);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.page{padding-bottom:2rem;display:block}.page .theme-default-content{max-width:var(--content-width);margin:0 auto;padding:2rem 2.5rem;padding-top:0}@media (max-width: 959px){.page .theme-default-content{padding:2rem}}@media (max-width: 419px){.page .theme-default-content{padding:1.5rem}}.page-meta{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem;overflow:auto}@media (max-width: 959px){.page-meta{padding:2rem}}@media (max-width: 419px){.page-meta{padding:1.5rem}}.page-meta .meta-item{cursor:default;margin-top:.8rem}.page-meta .meta-item .meta-item-label{font-weight:500;color:var(--c-text-lighter)}.page-meta .meta-item .meta-item-info{font-weight:400;color:var(--c-text-quote)}.page-meta .edit-link{display:inline-block;margin-right:.25rem}.page-meta .last-updated{float:right}@media (max-width: 719px){.page-meta .last-updated{font-size:.8em;float:none}.page-meta .contributors{font-size:.8em}}.page-nav{max-width:var(--content-width);margin:0 auto;padding:1rem 2.5rem 2rem;padding-bottom:0}@media (max-width: 959px){.page-nav{padding:2rem}}@media (max-width: 419px){.page-nav{padding:1.5rem}}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--c-border);transition:border-color var(--t-color);padding-top:1rem;overflow:auto}.page-nav .prev a:before{content:"\2190"}.page-nav .next{float:right}.page-nav .next a:after{content:"\2192"}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .navbar-items{display:none;border-bottom:1px solid var(--c-border);transition:border-color var(--t-color);padding:.5rem 0 .75rem}.sidebar .navbar-items a{font-weight:600}.sidebar .navbar-items .navbar-item{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar .sidebar-items{padding:1.5rem 0}@media (max-width: 719px){.sidebar .navbar-items{display:block}.sidebar .navbar-items .navbar-dropdown-wrapper .navbar-dropdown .navbar-dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar .sidebar-items{padding:1rem 0}}.sidebar-item{cursor:default;border-left:.25rem solid transparent;color:var(--c-text)}.sidebar-item:focus-visible{outline-width:1px;outline-offset:-1px}.sidebar-item.active:not(p.sidebar-heading){font-weight:600;color:var(--c-text-accent);border-left-color:var(--c-text-accent)}.sidebar-item.sidebar-heading{transition:color .15s ease;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0}.sidebar-item.sidebar-heading+.sidebar-item-children{transition:height .1s ease-out;overflow:hidden;margin-bottom:.75rem}.sidebar-item.sidebar-heading.collapsible{cursor:pointer}.sidebar-item.sidebar-heading.collapsible .arrow{position:relative;top:-.12em;left:.5em}.sidebar-item:not(.sidebar-heading){font-size:1em;font-weight:400;display:inline-block;margin:0;padding:.35rem 1rem .35rem 2rem;line-height:1.4;width:100%;box-sizing:border-box}.sidebar-item:not(.sidebar-heading)+.sidebar-item-children{padding-left:1rem;font-size:.95em}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading){padding:.25rem 1rem .25rem 1.75rem}.sidebar-item-children .sidebar-item-children .sidebar-item:not(.sidebar-heading).active{font-weight:500;border-left-color:transparent}a.sidebar-heading+.sidebar-item-children .sidebar-item:not(.sidebar-heading).active{border-left-color:transparent}a.sidebar-item{cursor:pointer}a.sidebar-item:hover{color:var(--c-text-accent)}.table-of-contents .badge{vertical-align:middle}.dropdown-enter-from,.dropdown-leave-to{height:0!important}.fade-slide-y-enter-active{transition:all .2s ease}.fade-slide-y-leave-active{transition:all .2s cubic-bezier(1,.5,.8,1)}.fade-slide-y-enter-from,.fade-slide-y-leave-to{transform:translateY(10px);opacity:0}:root{--c-brand: rgb(49, 164, 255);--c-brand-light: rgb(129, 189, 249);--content-width: 965px}code{padding:3px 5px;border-radius:5px}.badge{margin-bottom:5px}.custom-container{border-radius:5px}.sidebar-item{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.language-text ::-webkit-scrollbar-track{background:rgb(86,96,110);border-radius:50px}.language-text ::-webkit-scrollbar-thumb:hover{background:rgb(121,135,155)}.language-kotlin ::-webkit-scrollbar-track{background:rgb(86,96,110);border-radius:50px}.language-kotlin ::-webkit-scrollbar-thumb:hover{background:rgb(121,135,155)}.language-java ::-webkit-scrollbar-track{background:rgb(86,96,110);border-radius:50px}.language-java ::-webkit-scrollbar-thumb:hover{background:rgb(121,135,155)}.language-groovy ::-webkit-scrollbar-track{background:rgb(86,96,110);border-radius:50px}.language-groovy ::-webkit-scrollbar-thumb:hover{background:rgb(121,135,155)}.language-xml ::-webkit-scrollbar-track{background:rgb(86,96,110);border-radius:50px}.language-xml ::-webkit-scrollbar-thumb:hover{background:rgb(121,135,155)}.hidden-anchor-page h6{color:transparent;margin-bottom:-35px;padding-top:50px}.code-page h1{font-size:24pt}.code-page h2{font-size:18pt}.code-page h3{font-size:15pt}.code-page h4{font-size:12pt}.code-page h5{font-size:9.6pt}.code-page h6{font-size:8.4pt}.code-page .symbol{color:#8e9ba8}.code-page .deprecated{color:#8e9ba8;text-decoration:line-through}html{scroll-behavior:smooth}html ::-webkit-scrollbar{width:8px;height:6.5px}html ::-webkit-scrollbar-track{background:rgb(234,236,239)}html ::-webkit-scrollbar-thumb{background:rgb(189,189,189);border-radius:50px}html ::-webkit-scrollbar-thumb:hover{background:rgb(133,133,133);border-radius:50px}html.dark{--c-brand: rgb(49, 164, 255);--c-brand-light: rgb(129, 189, 249);--content-width: 965px}html.dark ::-webkit-scrollbar{width:8px;height:6.5px}html.dark ::-webkit-scrollbar-track{background:rgb(41,46,53)}html.dark ::-webkit-scrollbar-thumb{background:rgb(65,72,83);border-radius:50px}html.dark ::-webkit-scrollbar-thumb:hover{background:rgb(56,62,72);border-radius:50px}:root{--search-bg-color: #ffffff;--search-accent-color: #3eaf7c;--search-text-color: #2c3e50;--search-border-color: #eaecef;--search-item-text-color: #5d81a5;--search-item-focus-bg-color: #f3f4f5;--search-input-width: 8rem;--search-result-width: 20rem}.search-box{display:inline-block;position:relative;margin-left:1rem}.search-box input{cursor:text;width:var(--search-input-width);height:2rem;color:var(--search-text-color);display:inline-block;border:1px solid var(--search-border-color);border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all ease .3s;background:var(--search-bg-color) url(/YukiReflection/assets/search.0782d0d1.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:var(--search-accent-color)}.search-box .suggestions{background:var(--search-bg-color);width:var(--search-result-width);position:absolute;top:2rem;right:0;border:1px solid var(--search-border-color);border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion.focus{background-color:var(--search-item-focus-bg-color)}.search-box .suggestion.focus a{color:var(--search-accent-color)}.search-box .suggestion a{white-space:normal;color:var(--search-item-text-color)}.search-box .suggestion .page-title{font-weight:600}.search-box .suggestion .page-header{font-size:.9em;margin-left:.25em}@media (max-width: 720px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (max-width: 420px){.search-box input:focus{width:8rem}.search-box .suggestions{width:calc(100vw - 4rem);right:-.5rem}} diff --git a/docs/en/about/about.html b/docs/en/about/about.html deleted file mode 100644 index 490aedf..0000000 --- a/docs/en/about/about.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - About this Document | Yuki Reflection - - - - -

    About this Document

    This document is powered by VuePressopen in new window.

    License

    The MIT License (MIT)open in new window

    MIT License
    -
    -Copyright (C) 2019-2023 HighCapable
    -
    -Permission is hereby granted, free of charge, to any person obtaining a copy
    -of this software and associated documentation files (the "Software"), to deal
    -in the Software without restriction, including without limitation the rights
    -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    -copies of the Software, and to permit persons to whom the Software is
    -furnished to do so, subject to the following conditions:
    -
    -The above copyright notice and this permission notice shall be included in all
    -copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    -SOFTWARE.
    -

    Copyright © 2019-2023 HighCapable

    - - - diff --git a/docs/en/about/changelog.html b/docs/en/about/changelog.html deleted file mode 100644 index 4ace379..0000000 --- a/docs/en/about/changelog.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - Changelog | Yuki Reflection - - - - -

    Changelog

    The version update history of YukiReflection is recorded here.

    Pay Attention

    We will only maintain the latest API version, if you are using an outdate API version, you voluntarily renounce any possibility of maintenance.

    Notice

    To avoid translation time consumption, Changelog will use Google Translation from Chinese to English, please refer to the original text for actual reference.

    Time zone of version release date: UTC+8

    1.0.2 | 2023.04.25  latest

    • Fixed a critical issue where the Member cache did not take effect and persistent storage eventually caused app out of memory (OOM), thanks to Art-Chenopen in new window
    • Remove the direct cache function of Member and deprecated YukiReflection.Configs.isEnableMemberCache, keep the cache function of Class
    • Modified finder to Sequence, optimize the finding speed and performance of Member

    1.0.1 | 2023.04.16  stale

    • Change the type of dependent library from Java Library (jar) to Android Library (aar)
    • Removed wrong Class object declaration in Android type

    1.0.0 | 2023.01.26  stale

    • The first version is submitted to Maven
    - - - diff --git a/docs/en/about/contacts.html b/docs/en/about/contacts.html deleted file mode 100644 index 789e4d5..0000000 --- a/docs/en/about/contacts.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - Contact Us | Yuki Reflection - - - - -

    Contact Us

    If you have any questions in use, or have any constructive suggestions, you can contact us.

    Join us Click to join Telegram groupopen in new window, Click to join Telegram group (Developer)open in new window.

    Find me on Twitter @fankesyooniopen in new window.

    Help with Maintenance

    Thank you for choosing and using YukiReflection.

    If you have code-related suggestions and requests, you can submit a Pull Request on GitHub.

    - - - diff --git a/docs/en/about/future.html b/docs/en/about/future.html deleted file mode 100644 index 858d667..0000000 --- a/docs/en/about/future.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - Looking for Future | Yuki Reflection - - - - -

    Looking for Future

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

    Future Plans

    Features that YukiReflection may add later are included here.

    Automatically Generate Reflection Code

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

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

    The following example

    package com.example.test;
    -
    -public class MyClass {
    -    
    -    private String myField = "test";
    -
    -    public MyClass() {
    -        //...
    -    }
    -
    -    private String myMethod1(String var1, int var2) {
    -        //...
    -    }
    -
    -    private void myMethod2() {
    -        //...
    -    }
    -
    -    private void myMethod3(String var1) {
    -        //...
    -    }
    -}
    -

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

    The following example

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

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

    The following example

    package com.example.test
    -
    -@ReflectClass
    -class MyClass {
    -
    -    @ReflectField
    -    val myField: String = fieldValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod1(var1: String, var2: Int): String = methodReturnValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod2() = MethodReturnType.Unit
    -
    -    @ReflectMethod
    -    fun myMethod3(var1: String) = MethodReturnType.Unit
    -}
    -

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

    The following example

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

    Tips

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

    - - - diff --git a/docs/en/api/features.html b/docs/en/api/features.html deleted file mode 100644 index f6cb606..0000000 --- a/docs/en/api/features.html +++ /dev/null @@ -1,803 +0,0 @@ - - - - - - - - - Features | Yuki Reflection - - - - -

    Features

    This page contains usage examples for all core features of YukiReflection.

    Class Extensions

    Here are the extension functions related to the Class object itself.

    Object Conversion

    Suppose we want to get a Class that cannot be called directly.

    Normally, we can use the standard reflection API to find this Class.

    The following example

    // Class in the default ClassLoader environment
    -var instance = Class.forName("com.demo.Test")
    -// Specify the Class in the ClassLoader environment
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = customClassLoader?.loadClass("com.demo.Test")
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Get this Class directly
    -var instance = "com.demo.Test".toClass()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = "com.demo.Test".toClass(customClassLoader)
    -

    If the current Class does not exist, using the above method will throw an exception.

    If you are not sure whether the Class exists, you can refer to the following solutions.

    The following example

    // Get this Class directly
    -// If not available, the result will be null but no exception will be thrown
    -var instance = "com.demo.Test".toClassOrNull()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -// If not available, the result will be null but no exception will be thrown
    -var instance = "com.demo.Test".toClassOrNull(customClassLoader)
    -

    We can also get an existing Class object by mapping.

    The following example

    // Assume this Class can be obtained directly
    -var instance = classOf<Test>()
    -// We can also customize the ClassLoader where the Class is located, which is very effective for stubs
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var instance = classOf<Test>(customClassLoader)
    -

    Tips

    For more functions, please refer to classOf, String.toClass, String.toClassOrNull methods.

    Existential Judgment

    Suppose we want to determine whether a Class exists.

    Usually, we can use the standard reflection API to find this Class to determine whether it exists by exception.

    The following example

    // Class in the default ClassLoader environment
    -var isExist = try {
    -    Class.forName("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -// Specify the Class in the ClassLoader environment
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var isExist = try {
    -    customClassLoader?.loadClass("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Check if this class exists
    -var isExist = "com.demo.Test".hasClass()
    -// ClassLoader where the custom Class is located
    -val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -var isExist = "com.demo.Test".hasClass(customClassLoader)
    -

    Tips

    For more functions, please refer to String.hasClass method.

    The Class name in the current app's Dex after being obfuscated by tools such as R8 will be difficult to distinguish.

    Its correct position is uncertain, and cannot be obtained directly through Object Conversion.

    At this point, there is DexClassFinder, its role is to determine the instance of this Class by the bytecode features in the Class that need to be searched.

    Notice

    This feature is only available on the Android platform.

    At present, the function of DexClassFinder is still in the experimental stage.

    Since the search function is only implemented through the Java layer, the performance may not reach the optimal level when there are too many current app's Class.

    If something got wrong welcome to feedback.

    Since it is a reflection-level API, currently it can only locate the specified Class through the characteristics of Class and Member, and cannot locate it by specifying the string and method content characteristics in the bytecode.

    The speed of searching Class depends on the performance of the current device.

    At present, the mainstream mobile processors are in the 3~10s range when the conditions are not complicated in the 10~15w number of Class, the fastest speed can reach within 25s under slightly complex conditions.

    Please note that the more the same type Class is matched, the slower the speed.

    Pay Attention

    After YukiHookAPI 2.x.x released, this function will be deprecated and will be removed directly from YukiReflection.

    We welcome all developers to start using DexKitopen in new window, which is a high-performance runtime parsing library for Dex implemented in C++, which is more efficient than the Java layer in terms of performance, efficient and excellent, it is still in the development stage, your valuable suggestions are welcome.

    Get Started

    Below is a simple usage example.

    Suppose the following Class is what we want, the names are obfuscated and may be different in each version.

    The following example

    package com.demo;
    -
    -public class a extends Activity implements Serializable {
    -
    -    public a(String var1) {
    -        // ...
    -    }
    -
    -    private String a;
    -
    -    private String b;
    -
    -    private boolean a;
    -
    -    protected void onCreate(Bundle var1) {
    -        // ...
    -    }
    -
    -    private static void a(String var1) {
    -        // ...
    -    }
    -
    -    private String a(boolean var1, String var2) {
    -        // ...
    -    }
    -
    -    private void a() {
    -        // ...
    -    }
    -
    -    public void a(boolean var1, a var2, b var3, String var4) {
    -        // ...
    -    }
    -}
    -

    At this point, we want to get this Class, you can use the ClassLoader.searchClass method directly.

    Each of the conditions demonstrated below is optional, and the more complex the conditions, the more accurate the positioning and the worse the performance.

    The following example

    searchClass {
    -    // Start the search from the specified package name range
    -    // In actual use, you can specify multiple package name ranges at the same time
    -    from("com.demo")
    -    // Specify the result of getSimpleName of the current Class
    -    // You can directly make logical judgments on this string
    -    // Here we are not sure whether its name is a, we can only judge the length of the string
    -    simpleName { it.length == 1 }
    -    // Specify the inherited parent class object
    -    // If it is an existing stub, it can be directly represented by generics
    -    extends<Activity>()
    -    // Specify the inherited parent class object
    -    // Which can be written directly as the full class name
    -    // And you can also specify multiple objects at the same time
    -    extends("android.app.Activity")
    -    // Specify the implemented interface
    -    // If it exists stub, can be directly represented by generics
    -    implements<Serializable>()
    -    // Specify the implemented interface
    -    // Which can be written directly as a full class name, or you can specify multiple at the same time
    -    implements("java.io.Serializable")
    -    // Specify the type and style of the constructor
    -    // And the number count that exists in the current class
    -    constructor { param(StringClass) }.count(num = 1)
    -    // Specify the type and style of the variable
    -    // And the number that exists in the current class count
    -    field { type = StringClass }.count(num = 2)
    -    // Specify the type and style of the variable
    -    // And the number that exists in the current class count
    -    field { type = BooleanType }.count(num = 1)
    -    // Directly specify the number of all variables that exist in the current class count
    -    field().count(num = 3)
    -    // If you think the number of variables is indeterminate
    -    // You can also use the following custom conditions
    -    field().count(1..3)
    -    field().count { it >= 3 }
    -    // Specify the type and style of the method
    -    // And the number that exists in the current class count
    -    method {
    -        name = "onCreate"
    -        param(BundleClass)
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isStatic && isPrivate }
    -        param(StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, StringClass)
    -        returnType = StringClass
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // Specify the modifier, and the number count in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        emptyParam()
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Specify the type and style of the method
    -    // As well as the modifier and VagueType
    -    // And the number count that exists in the current class
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, VagueType, VagueType, StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // Directly specify the number of all methods that exist in the current class count
    -    method().count(num = 5)
    -    // If you think the number of methods is uncertain, you can also use the following custom conditions
    -    method().count(1..5)
    -    method().count { it >= 5 }
    -    // Directly specify the number of all members existing in the current class count
    -    // Members include: Field, Method, Constructor
    -    member().count(num = 9)
    -    // There must be a static modifier in all members, you can add this condition like this
    -    member {
    -        modifiers { isStatic }
    -    }
    -}.get() // Get the instance of this Class itself, if not found, it will return null
    -

    Tips

    The conditional usage of Field, Method, Constructor in the above usage is consistent with the related usage in Member Extensions, with only minor differences.

    For more functions, please refer to MemberRules, FieldRules, MethodRules, ConstructorRules.

    By default, DexClassFinder will use synchronous mode to search Class, which will block the current thread until it finds or finds an exception.

    If the search takes too long, it may cause ANR problems to the current app.

    In response to the above problems, we can enable asynchronous, just add the parameter async = true, which will not require you to start a thread again, the API has already handled the related problems for you.

    Notice

    To use this function, you need to pass in the Context of the current app as the first method parameter.

    For the asynchronous case you need to use the wait method to get the result, the get method will no longer work.

    The following example

    val context: Context // Assume this is the Context of the current app
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class1 ->
    -    // Get asynchronous result
    -}
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class2 ->
    -    // Get asynchronous result
    -}
    -

    In this way, our search process runs asynchronously, it will not block the main thread, and each search will be performed in a separate thread at the same time, which can achieve the effect of parallel tasks.

    Local Cache

    Since the search is performed again every time the current app is reopened, this is a waste of repetitive performance when the current app's version is unchanged.

    At this point, we can locally cache the search results of the current app's version by specifying the name parameter.

    Next time, the found class name will be directly read from the local cache.

    The local cache uses SharedPreferences, which will be saved to the app's data directory and will be re-cached after the app's version is updated.

    After enabling the local cache, async = true will be set at the same time, you don't need to set it manually.

    Notice

    To use this function, you need to pass in the Context of the current app as the first method parameter.

    The following example

    val context: Context // Assume this is the Context of the current app
    -searchClass(context, name = "com.demo.class1") {
    -    // ...
    -}.wait { class1 ->
    -    // Get asynchronous result
    -}
    -searchClass(context, name = "com.demo.class2") {
    -    // ...
    -}.wait { class2 ->
    -    // Get asynchronous result
    -}
    -

    If you want to clear the local cache manually, you can use the following method to clear the current version of the current app's cache.

    The following example

    val context: Context // Assume this is the Context of the current app
    -DexClassFinder.clearCache(context)
    -

    You can also clear the app's cache for a specific version.

    The following example

    val context: Context // Assume this is the Context of the current app
    -DexClassFinder.clearCache(context, versionName = "1.0", versionCode = 1)
    -

    If you need to search a set of Class at the same time using a fixed condition, then you only need to use the all or waitAll method to get the result.

    // Synchronous search, use all to get all the results found by the conditions
    -searchClass {
    -    // ...
    -}.all().forEach { clazz ->
    -    // Get each result
    -}
    -// Synchronous search, using all { ... } to iterate over each result
    -searchClass {
    -    // ...
    -}.all { clazz ->
    -    // Get each result
    -}
    -// Asynchronous search, use waitAll to get all the results found by the conditions
    -val context: Context // Assume this is the Context of the current app
    -searchClass(context, async = true) {
    -    // ...
    -}.waitAll { classes ->
    -    classes.forEach {
    -        // Get each result
    -    }
    -}
    -

    Tips

    For more functions, please refer to ClassLoader.searchClass method.

    Member Extensions

    Here are the extension functions related to the Class bytecode member variables Field, Method, Constructor.

    Tips

    Member is the interface description object of Field, Method, Constructor, which is the general term for the bytecode members in Class in Java reflection.

    Suppose there is such a Class.

    The following example

    package com.demo;
    -
    -public class BaseTest {
    -
    -    public BaseTest() {
    -        // ...
    -    }
    -
    -    public BaseTest(boolean isInit) {
    -        // ...
    -    }
    -
    -    private void doBaseTask(String taskName) {
    -        // ...
    -    }
    -}
    -
    package com.demo;
    -
    -public class Test extends BaseTest {
    -
    -    public Test() {
    -        // ...
    -    }
    -
    -    public Test(boolean isInit) {
    -        // ...
    -    }
    -
    -    private static TAG = "Test";
    -
    -    private BaseTest baseInstance;
    -
    -    private String a;
    -
    -    private boolean a;
    -
    -    private boolean isTaskRunning = false;
    -
    -    private static void init() {
    -        // ...
    -    }
    -
    -    private void doTask(String taskName) {
    -        // ...
    -    }
    -
    -    private void release(String taskName, Function<boolean, String> task, boolean isFinish) {
    -        // ...
    -    }
    -
    -    private void stop() {
    -        // ...
    -    }
    -
    -    private String getName() {
    -        // ...
    -    }
    -
    -    private void b() {
    -        // ...
    -    }
    -
    -    private void b(String a) {
    -        // ...
    -    }
    -}
    -

    Find and Reflection

    Suppose we want to get the doTask method of Test and execute it.

    Normally, we can use the standard reflection API to find this method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using reflection API
    -Test::class.java
    -    .getDeclaredMethod("doTask", String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(instance, "task_name")
    -

    This is probably not very friendly, and YukiReflection provides you with a syntactic sugar that can be used anywhere.

    The above writing can be written as YukiReflection as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Tips

    For more features, please refer to MethodFinder.

    Similarly, we need to get the isTaskRunning field can also be written as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    name = "isTaskRunning"
    -    type = BooleanType
    -}.get(instance).any() // Any instantiates an object of any type of Field
    -

    Tips

    For more features, please refer to FieldFinder.

    Maybe you also want to get the current Class constructor, the same can be achieved.

    The following example

    Test::class.java.constructor {
    -    param(BooleanType)
    -}.get().call(true) // Can create a new instance
    -

    If you want to get the no-argument constructor of Class, you can write it as follows.

    The following example

    Test::class.java.constructor().get().call() // Create a new instance
    -

    Tips

    For more features, please refer to ConstructorFinder.

    Optional Find Conditions

    Suppose we want to get the getName method in Class, which can be implemented as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -    returnType = StringClass
    -}.get(instance).string() // Get the result of the method
    -

    Through observation, it is found that there is only one method named getName in this Class, so can we make it simpler?

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -}.get(instance).string() // Get the result of the method
    -

    Yes, you can refine your find criteria for methods that do not change exactly.

    When using only get or wait methods to get results, YukiReflection will match the first found result in bytecode order by default.

    The problem comes again, this Class has a release method, but its method parameters are very long, and some types may not be directly available.

    Normally we would use param(...) to find this method, but is there an easier way.

    At this point, after determining the uniqueness of the method, you can use paramCount to find the method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "release"
    -    // At this point
    -    // We don't have to determine the specific type of method parameters, just write the number
    -    paramCount = 3
    -}.get(instance) // Get this method
    -

    Although the above example can be successfully matched, it is not accurate.

    At this time, you can also use VagueType to fill in the method parameter type that you do not want to fill in.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "release"
    -    // Use VagueType to fill in the type you don't want to fill in
    -    // While ensuring that other types can match
    -    param(StringClass, VagueType, BooleanType)
    -}.get(instance) // Get this method
    -

    If you are not sure about the type of each parameter, you can create a conditional method body with the param { ... } method.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -     name = "release"
    -     // Get the it (Class) method parameter type array instance
    -     // To only determine the known type and its position
    -     param { it[0] == StringClass && it[2] == BooleanType }
    -}.get(instance) // Get this method
    -

    Tips

    Use param { ... } to create a conditional method body, where the variable it is the Class type array instance of the current method parameter, and you can freely use Class all objects and their methods in.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.type, MethodFinder.param, MethodFinder.returnType, ConstructorFinder.param method.

    Find in Super Class

    You will notice that Test extends BaseTest, now we want to get the doBaseTask method of BaseTest, how do we do it without knowing the name of the super class?

    Referring to the above find conditions, we only need to add a superClass to the find conditions to achieve this function.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // Just add this condition
    -    superClass()
    -}.get(instance).call("task_name")
    -

    At this time, we can get this method in the super class.

    superClass has a parameter isOnlySuperClass, when set to true, you can skip the current Class and only find the super class of the current Class.

    Since we now know that the doBaseTask method only exists in the super class, this condition can be added to save finding time.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // Add a find condition
    -    superClass(isOnlySuperClass = true)
    -}.get(instance).call("task_name")
    -

    At this time, we can also get this method in the super class.

    Once superClass is set, it will automatically cycle backward to find out whether this method exists in all extends super classes, until it finds that the target has no super class (the extends is java.lang.Object).

    Tips

    For more functions, please refer to MethodFinder.superClass, ConstructorFinder.superClass, FieldFinder.superClass methods.

    Pay Attention

    The currently founded Method can only find the Method of the current Class unless the superClass condition is specified, which is the default behavior of the Java Reflection API.

    Vague Find

    If we want to find a method name, but are not sure if it has changed in each release, we can use vague find.

    Suppose we want to get the doTask method in Class, which can be implemented as follows.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Set name is case insensitive
    -        it.equals("dotask", isIgnoreCase = true)
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Knowing that there is currently only one doTask method in Class, we can also judge that the method name contains only the characters specified in it.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Only contains oTas
    -        it.contains("oTas")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    We can also judge based on the first and last strings.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Contains do at the beginning and Task at the end
    -        it.startsWith("do") && it.endsWith("Task")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    By observing that this method name contains only letters, we can add a precise search condition.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name {
    -        // Start with do, end with Task, just letters
    -        it.startsWith("do") && it.endsWith("Task") && it.isOnlyLetters()
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    Tips

    Use name { ... } to create a conditional method body, where the variable it is the string of the current name, and you can freely use it in the extension method of NameRules function.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.name, MethodFinder.name methods and NameRules.

    Multiple Find

    Sometimes, we may need to find a set of methods, constructors, and fields with the same characteristics in a Class.

    At this time, we can use relative condition matching to complete.

    Based on the result of the find condition, we only need to replace get with all to get all the bytecodes that match the condition.

    Suppose this time we want to get all methods in Class with the number of method parameters in the range 1..3, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    paramCount(1..3)
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 3 methods.

    private void doTask(String taskName)

    private void release(String taskName, Function<boolean, String> task, boolean isFinish)

    private void b(String a)

    If you want to define the conditions for the range of the number of parameters more freely, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    paramCount { it < 3 }
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 6 methods.

    private static void init()

    private void doTask(String taskName)

    private void stop(String a)

    private void getName(String a)

    private void b()

    private void b(String a)

    By observing that there are two methods named b in Class, you can use the following implementation.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "b"
    -}.all(instance).forEach { instance ->
    -    // Call and execute each method
    -    instance.call(...)
    -}
    -

    The above example can be perfectly matched to the following 2 methods.

    private void b()

    private void b(String a)

    Tips

    Use paramCount { ... } to create a conditional method body, where the variable it is the integer of the current number of parameters, and you can use it freely in the extension method of CountRules function in it.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to MethodFinder.paramCount, ConstructorFinder.paramCount methods and CountRules.

    Static Bytecode

    Some methods and fields are statically implemented in Class, at this time, we can call them without passing in an instance.

    Suppose we want to get the contents of the static field TAG this time.

    The following example

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -}.get().string() // The type of Field is string and can be cast directly
    -

    Assuming that there is a non-static TAG field with the same name in Class, what should I do at this time?

    Just add a filter.

    The following example

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -    // This field to identify the lookup needs to be static
    -    modifiers { isStatic }
    -}.get().string() // The type of Field is string and can be cast directly
    -

    We can also call a static method called init.

    The following example

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -}.get().call()
    -

    Likewise, you can identify it as a static.

    The following example

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -    // This method of identity find needs to be static
    -    modifiers { isStatic }
    -}.get().call()
    -

    Tips

    Use modifiers { ... } to create a conditional method body, at which point you can freely use its functionality in ModifierRules.

    The condition at the end of the method body needs to return a Boolean, which is the final condition judgment result.

    For more functions, please refer to FieldFinder.modifiers, MethodFinder.modifiers, ConstructorFinder.modifiers methods and ModifierRules.

    Obfuscated Bytecode

    You may have noticed that the example Class given here has two obfuscated field names, both of which are a, how do we get them at this time?

    There are two options.

    The first option is to determine the name and type of the field.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    name = "a"
    -    type = BooleanType
    -}.get(instance).any() // Get a field named a with type Boolean
    -

    The second option is to determine where the type of the field is located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.field {
    -    type(BooleanType).index().first()
    -}.get(instance).any() // Get the first field of type Boolean
    -

    In the above two cases, the corresponding field private boolean a can be obtained.

    Likewise, there are two obfuscated method names in this Class, both of which are b.

    You can also have two options to get them.

    The first option is to determine the method name and method parameters.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "b"
    -    param(StringClass)
    -}.get(instance).call("test_string") // Get the method whose name is b and whose parameter is [String]
    -

    The second option is to determine where the parameters of the method are located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    param(StringClass).index().first()
    -}.get(instance).call("test_string") // Get the method whose first method parameter is [String]
    -

    Since it is observed that this method is last in Class, then we have an alternative.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    order().index().last()
    -}.get(instance).call("test_string") // Get the last method of the current Class
    -

    Notice

    Please try to avoid using order to filter bytecode subscripts, they may be indeterminate unless you are sure that its position in this Class must not change.

    Directly Called

    The methods of calling bytecode described above all need to use get(instance) to call the corresponding method.

    Is there a simpler way?

    At this point, you can use the current method on any instance to create a call space.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // Execute the doTask method
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -    // Execute the stop method
    -    method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -    // Get name
    -    val name = method { name = "getName" }.string()
    -}
    -

    We can also use superClass to call methods of the current Class super class.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // Execute the doBaseTask method of the parent class
    -    superClass().method {
    -        name = "doBaseTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    If you don't like to use a lambda to create the namespace of the current instance, you can use the current() method directly.

    The following example

    // Assuming this is an instance of this Class, this Class cannot be obtained directly
    -val instance = Test()
    -// Execute the doTask method
    -instance
    -    .current()
    -    .method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -// Execute the stop method
    -instance
    -    .current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// Get name
    -val name = instance.current().method { name = "getName" }.string()
    -

    Likewise, consecutive calls can be made between them, but inline calls are not allowed.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}.current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// ❗ Note that because current() returns the CurrentClass object itself
    -// It CANNOT BE CALLED like the following
    -instance.current().current()
    -

    For Field instances, there is also a convenience method that can directly get the object of the instance where Field is located.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Assume this Class is not directly available
    -instance.current {
    -    // <Plan 1>
    -    field {
    -        name = "baseInstance"
    -    }.current {
    -        method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }.call("task_name")
    -    }
    -    // <Plan 2>
    -    field {
    -        name = "baseInstance"
    -    }.current()
    -        ?.method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }?.call("task_name")
    -}
    -

    Notice

    The above current method is equivalent to calling the field { ... }.any()?.current() method in CurrentClass for you.

    If there is no CurrentClass calling field, you need to use field { ... }.get(instance).current() to call it.

    The problem comes again, I want to use reflection to create the following instance and call the method in it, how to do it?

    The following example

    Test(true).doTask("task_name")
    -

    Usually, we can use the standard reflection API to call.

    The following example

    "com.demo.Test".toClass()
    -    .getDeclaredConstructor(Boolean::class.java)
    -    .apply { isAccessible = true }
    -    .newInstance(true)
    -    .apply {
    -        javaClass
    -            .getDeclaredMethod("doTask", String::class.java)
    -            .apply { isAccessible = true }
    -            .invoke(this, "task_name")
    -    }
    -

    But I feel that this approach is very troublesome.

    Is there a more concise way to call it?

    At this time, we can also use the buildOf method to create an instance.

    The following example

    "com.demo.Test".toClass().buildOf(true) { param(BooleanType) }?.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    If you want the buildOf method to return the type of the current instance, you can include a type-generic declaration in it instead of using as to cast the target type.

    In this case, the constructor of the instance itself is private, but the method inside is public, so we only need to create its constructor by reflection.

    The following example

    // Assume this Class can be obtained directly
    -val test = Test::class.java.buildOf<Test>(true) { param(BooleanType) }
    -test.doTask("task_name")
    -

    Tips

    For more functions, please refer to CurrentClass and Class.buildOf method.

    Find Again

    Suppose there are three different versions of Class, all of which are the same Class for different versions of this app.

    There is also a method doTask in it, assuming they function the same.

    The following example of version A

    public class Test {
    -
    -    public void doTask() {
    -        // ...
    -    }
    -}
    -

    The following example of version B

    public class Test {
    -
    -    public void doTask(String taskName) {
    -        // ...
    -    }
    -}
    -

    The following example of version C

    public class Test {
    -
    -    public void doTask(String taskName, int type) {
    -        // ...
    -    }
    -}
    -

    We need to get this same functionality of the doTask method in a different version, how do we do it?

    At this point, you can use RemedyPlan to complete your needs.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -    method {
    -        name = "doTask"
    -        param(StringClass, IntType)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -}.wait(instance) {
    -    // Get the result of the method
    -}
    -

    Pay Attention

    The method lookup result using RemedyPlan can no longer use get to get method instance, you should use wait method.

    Also, you can continue to use RemedyPlan while using Multiple Find.

    The following example

    // Assume this is an instance of this Class
    -val instance = Test()
    -// Call and execute using YukiReflection
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        paramCount(0..1)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -    method {
    -        name = "doTask"
    -        paramCount(1..2)
    -    }.onFind {
    -        // Found logic can be implemented here
    -    }
    -}.waitAll(instance) {
    -    // Get the result of the method
    -}
    -

    Relative Matching

    Suppose there is a Class with the same function in different versions of the current app but only the name of the Class is different.

    The following example of version A

    public class ATest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    The following example of version B

    public class BTest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    At this time, what should we do if we want to call the doTask method in this Class in each version?

    The usual practice is to check if Class exists.

    The following example

    // First find this Class
    -val currentClass =
    -    if("com.demo.ATest".hasClass()) "com.demo.ATest".toClass() else "com.demo.BTest".toClass()
    -// Then look for this method and call
    -currentClass.method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    I feel that this solution is very inelegant and cumbersome, then YukiReflection provides you with a very convenient VariousClass to solve this problem.

    Now, you can get this Class directly using the following methods.

    The following example

    VariousClass("com.demo.ATest", "com.demo.BTest").get().method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    If the current Class exists in the specified ClassLoader, you can fill in your ClassLoader in get.

    The following example

    val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").get(customClassLoader).method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    If you are not sure that all Class will be matched, you can use the getOrNull method.

    The following example

    val customClassLoader: ClassLoader? = ... // Assume this is your ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").getOrNull(customClassLoader)?.method {
    -     name = "doTask"
    -     emptyParam()
    -}?.get()?.call()
    -

    Tips

    For more functions, please refer to VariousClass.

    Calling Generics

    In the process of reflection, we may encounter generic problems.

    In the reflection processing of generics, YukiReflection also provides a syntactic sugar that can be used anywhere.

    For example we have the following generic class.

    The following example

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -

    When we want to get a Class instance of the generic T or R in the current Class, only the following implementation is required.

    The following example

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // Get the operation object of the current instance
    -        // Get the Class instance of T, in the 0th position of the parameter
    -        // The default value can not be written
    -        val tClass = current().generic()?.argument()
    -        // Get the Class instance of R, in parameter 1
    -        val rClass = current().generic()?.argument(index = 1)
    -        // You can also use the following syntax
    -        current().generic {
    -             // Get the Class instance of T
    -             // In the 0th position of the parameter, the default value can be left blank
    -            val tClass = argument()
    -            // Get the Class instance of R, in parameter 1
    -            val rClass = argument(index = 1)
    -        }
    -    }
    -}
    -

    When we want to call this Class externally, it can be implemented as follows.

    The following example

    // Assume this is the Class of T
    -class TI {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -// Assume this is an instance of T
    -val tInstance: TI? = ...
    -// Get the Class instance of T
    -// In the 0th position of the parameter, the default value can be left blank
    -// And get the method foo and call it
    -TestGeneric::class.java.generic()?.argument()?.method {
    -    name = "foo"
    -    emptyParam()
    -}?.get(tInstance)?.invoke<TI>()
    -

    Tips

    For more functions, please refer to CurrentClass.generic, Class.generic methods and GenericClass.

    Pay Attention of Trap

    Here are some misunderstandings that may be encountered during use for reference.

    Restrictive Find Conditions

    Pay Attention

    In find conditions you can only use index function once except order.

    The following example

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    // ❗ Wrong usage, please keep only one index method
    -    returnType(StringClass).index(num = 1)
    -}
    -

    The following find conditions can be used without any problems.

    The following example

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    order().index(num = 1)
    -}
    -

    Necessary Find Conditions

    Pay Attention

    In common method find conditions, even methods without parameters need to set find conditions.

    Suppose we have the following Class.

    The following example

    public class TestFoo {
    -
    -    public void foo(String string) {
    -        // ...
    -    }
    -
    -    public void foo() {
    -        // ...
    -    }
    -}
    -

    We want to get the public void foo() method, which can be written as follows.

    The following example

    TestFoo::class.java.method {
    -    name = "foo"
    -}
    -

    However, the above example is wrong.

    You will find two foo methods in this Class, one of which takes a method parameter.

    Since the above example does not set the find conditions for param, the result will be the first method public void foo(String string) that matches the name and matches the bytecode order, not the last method we need.

    This is a frequent error, without method parameters, you will lose the use of method parameter find conditions.

    The correct usage is as follows.

    The following example

    TestFoo::class.java.method {
    -    name = "foo"
    -    // ✅ Correct usage, add detailed filter conditions
    -    emptyParam()
    -}
    -

    At this point, the above example will perfectly match the public void foo() method.

    Abbreviated Find Conditions

    In the construction method find conditions, constructors without parameters do not need to fill in the find conditions.

    Suppose we have the following Class.

    The following example

    public class TestFoo {
    -
    -    public TestFoo() {
    -        // ...
    -    }
    -}
    -

    We want to get the public TestFoo() constructor, which can be written as follows.

    The following example

    TestFoo::class.java.constructor { emptyParam() }
    -

    The above example can successfully obtain the public TestFoo() constructor, but it feels a bit cumbersome.

    Unlike normal methods, since the constructor does not need to consider the name, when the constructor has no parameters, we can omit the emptyParam parameter.

    The following example

    TestFoo::class.java.constructor()
    -

    Bytecode Type

    Pay Attention

    In the bytecode call result, the cast method can only specify the type corresponding to the bytecode.

    For example we want to get a field of type Boolean and cast it to String.

    The following is the wrong way to use it.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().string() // ❗ Wrong usage, must be cast to the bytecode target type
    -

    The following is the correct way to use it.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().boolean().toString() // ✅ The correct way to use, get the type and then convert
    -

    Common Type Extensions

    When find methods and fields, we usually need to specify the type in find conditions.

    The following example

    field {
    -    name = "test"
    -    type = Boolean::class.javaPrimitiveType
    -}
    -

    Expressing the type of Boolean::class.javaPrimitiveType in Kotlin is very long and inconvenient.

    Therefore, YukiReflection encapsulates common type calls for developers, including Android related types and Java common types and primitive type keywords.

    At this time, the above type can be written in the following form.

    The following example

    field {
    -    name = "test"
    -    type = BooleanType
    -}
    -

    The primitive type keywords in common Java types have been encapsulated as Type(Class Name) + Type, such as IntType, FloatType (their bytecode types are int, float).

    Correspondingly, array types also have convenient usage methods, assuming we want to get an array of type String[].

    You need to write java.lang.reflect.Array.newInstance(String::class.java, 0).javaClass to get this type.

    Does it feel very troublesome, at this time we can use the method ArrayClass(StringClass) to get this type.

    At the same time, since String is a common type, you can also directly use StringArrayClass to get this type.

    The methods found in some common requirements have their corresponding encapsulation types for use, in the format Type(Class Name) + Class.

    The following are wrapper names for some special case types in Java represented in YukiReflection.

    • voidUnitType

    • java.lang.VoidUnitClass

    • java.lang.ObjectAnyClass

    • java.lang.IntegerIntClass

    • java.lang.CharacterCharClass

    Notice

    Encapsulating types with Type(Class Name) + Type will and only be represented as Java primitive type keywords.

    Since the concept of primitive types does not exist in Kotlin, they will all be defined as KClass.

    There are 9 primitive type keywords in Java, of which 8 are primitive type, namely boolean, char, byte, short , int, float, long, double, of which the void type is a special case.

    At the same time, they all have their own corresponding package types in Java, such as java.lang.Boolean, java.lang.Integer, these types are unequal, Please note the distinction.

    Similarly, arrays also have corresponding wrapper types, which also need to be distinguished from Java primitive type keywords.

    For example, the encapsulation type of byte[] is ByteArrayType or ArrayClass(ByteType), and the encapsulation type of Byte[] is ByteArrayClass or ArrayClass(ByteClass), these types are also unequal.

    At the same time, you are welcome to contribute more commonly used types.

    - - - diff --git a/docs/en/api/home.html b/docs/en/api/home.html deleted file mode 100644 index 1e0bee0..0000000 --- a/docs/en/api/home.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - Document Introduce | Yuki Reflection - - - - -

    Document Introduce

    The document here will synchronize the relevant usage of the latest API version, please keep YukiReflection as the latest version to use the latest version of the function.

    Function Description

    The function description mainly introduces the related usage and purpose of the current API.

    Function Example Description

    The function examples mainly show the basic usage examples of the current API for reference.

    Change Record Description

    The function of the first version will be marked as v<version> first;

    New function added later will be marked as v<version> added;

    Later modified function will be appended as v<version> modified;

    Later deprecated function will be marked as v<version> deprecated and strikethrough;

    Later removed function will be marked as v<version> removed and strikethrough.

    • kt  Kotlin Static File

    • annotation  Annotation Class

    • interface  Interface Class

    • object  Class (Singleton)

    • class  Class

    • field  Field or get / set method or read-only get method

    • method  Method

    • enum  Enum constant

    • ext-field  Extension field (global)

    • ext-method  Extension method (global)

    • i-ext-field  Extension field (internal)

    • i-ext-method  Extension method (internal)

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/YukiReflection.html b/docs/en/api/public/com/highcapable/yukireflection/YukiReflection.html deleted file mode 100644 index a9a94fb..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/YukiReflection.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - YukiReflection - object | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    YukiReflection - object

    object YukiReflection
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是 YukiReflection 的装载调用类。

    API_VERSION_NAME - field

    const val API_VERSION_NAME: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获取当前 YukiReflection 的版本。

    API_VERSION_CODE - field

    const val API_VERSION_CODE: Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获取当前 YukiReflection 的版本号。

    Configs - object

    object Configs
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    对 API 相关功能的配置类。

    debugTag - field

    var debugTag: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个调试日志的全局标识。

    默认文案为 YukiReflection

    你可以修改为你自己的文案。

    isDebug - field

    var isDebug: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否启用 Debug 模式。

    默认不启用,启用后将交由日志输出管理器打印详细日志 (例如反射查找功能的耗时) 到控制台。

    请过滤 debugTag 即可找到每条日志。

    isAllowPrintingLogs - field

    var isAllowPrintingLogs: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否启用调试日志的输出功能。

    Notice

    关闭后将会停用 YukiReflection 对全部日志的输出。

    isEnableMemberCache - field

    Change Records

    v1.0.0 first

    v1.0.2 deprecated

    Member 的直接缓存功能已被移除,因为其存在内存溢出 (OOM) 问题

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Configs 类实现了一个 lambda 方法体。

    你可以轻松地调用它进行配置。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html b/docs/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html deleted file mode 100644 index 46747d7..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/bean/CurrentClass.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - CurrentClass - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    CurrentClass - class

    class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前实例的类操作对象。

    name - field

    val name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 classSetClass.getName

    simpleName - field

    val simpleName: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 classSetClass.getSimpleName

    generic - method

    fun generic(): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前实例中的泛型父类。

    如果当前实例不存在泛型将返回 null

    generic - method

    inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前实例中的泛型父类。

    如果当前实例不存在泛型将返回 null

    superClass - method

    fun superClass(): SuperClass
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    调用父类实例。

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    调用当前实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    调用当前实例中的方法。

    SuperClass - class

    inner class SuperClass internal constructor(internal val superClassSet: Class<*>)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前类的父类实例的类操作对象。

    name - field

    val name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 classSet 中父类的 Class.getName

    simpleName - field

    val simpleName: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 classSet 中父类的 Class.getSimpleName

    generic - method

    fun generic(): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    generic - method

    inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    调用父类实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    调用父类实例中的方法。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html b/docs/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html deleted file mode 100644 index 6b0b811..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/bean/GenericClass.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - GenericClass - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    GenericClass - class

    class GenericClass internal constructor(private val type: ParameterizedType)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
    -
    inline fun <reified T> argument(index: Int): Class<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得泛型参数数组下标的 Class 实例。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html b/docs/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html deleted file mode 100644 index bc6ad6f..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/bean/VariousClass.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - VariousClass - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariousClass - class

    class VariousClass(private vararg val name: String)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    匹配不到 Class 会返回 null,不会抛出异常。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html b/docs/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html deleted file mode 100644 index 836b8cb..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - ReflectionFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ReflectionFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是自定义 MemberClass 相关功能的查找匹配以及 invoke 的封装类。

    ClassLoader.listOfClasses - ext-method

    fun ClassLoader.listOfClasses(): List<String>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    写出当前 ClassLoader 下所有 Class 名称数组。

    Notice

    此方法在 Class 数量过多时会非常耗时。

    若要按指定规则查找一个 Class,请使用 ClassLoader.searchClass 方法。

    ClassLoader.searchClass - ext-method

    inline fun ClassLoader.searchClass(context: Context?, name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过当前 ClassLoader 按指定条件查找并得到 Dex 中的 Class

    Pay Attention

    此方法在 Class 数量过多及查找条件复杂时会非常耗时。

    建议启用 async 或设置 name 参数,name 参数将在当前 APP 不同版本中自动进行本地缓存以提升效率。

    如果使用了 asyncname 参数,则必须填写 context 参数。

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    Class.hasExtends - ext-field

    val Class<*>.hasExtends: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 是否有继承关系,父类是 Any 将被认为没有继承关系。

    Class?.extends - ext-method

    infix fun Class<*>?.extends(other: Class<*>?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 是否继承于 other

    如果当前 Class 就是 other 也会返回 true

    如果当前 Classnullothernull 会返回 false

    Function Example

    你可以使用此方法来判断两个 Class 是否存在继承关系。

    The following example

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否继承于 B
    -if (classA extends classB) {
    -    // Your code here.
    -}
    -

    Class?.notExtends - ext-method

    infix fun Class<*>?.notExtends(other: Class<*>?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 是否不继承于 other

    此方法相当于 extends 的反向判断。

    Function Example

    你可以使用此方法来判断两个 Class 是否不存在继承关系。

    The following example

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否不继承于 B
    -if (classA notExtends classB) {
    -    // Your code here.
    -}
    -

    Class?.implements - ext-method

    infix fun Class<*>?.implements(other: Class<*>?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 是否实现了 other 接口类。

    如果当前 Classnullothernull 会返回 false

    Function Example

    你可以使用此方法来判断两个 Class 是否存在依赖关系。

    The following example

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否实现了 B 接口类
    -if (classA implements classB) {
    -    // Your code here.
    -}
    -

    Class?.notImplements - ext-method

    infix fun Class<*>?.notImplements(other: Class<*>?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Class 是否未实现 other 接口类。

    此方法相当于 implements 的反向判断。

    Function Example

    你可以使用此方法来判断两个 Class 是否不存在依赖关系。

    The following example

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否未实现 B 接口类
    -if (classA notImplements classB) {
    -    // Your code here.
    -}
    -

    Class.toJavaPrimitiveType - ext-method

    fun Class<*>.toJavaPrimitiveType(): Class<*>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    自动转换当前 Class 为 Java 原始类型 (Primitive Type)。

    如果当前 Class 为 Java 或 Kotlin 基本类型将自动执行类型转换。

    当前能够自动转换的基本类型如下。

    • kotlin.Unit
    • java.lang.Void
    • java.lang.Boolean
    • java.lang.Integer
    • java.lang.Float
    • java.lang.Double
    • java.lang.Long
    • java.lang.Short
    • java.lang.Character
    • java.lang.Byte

    String.toClass - ext-method

    fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
    -
    inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过字符串类名转换为 loader 中的实体类。

    Function Example

    你可以直接填写你要查找的目标 Class,必须在默认 ClassLoader 下存在。

    The following example

    "com.example.demo.DemoClass".toClass()
    -

    你还可以自定义 Class 所在的 ClassLoader

    The following example

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -"com.example.demo.DemoClass".toClass(customClassLoader)
    -

    你还可以指定 Class 的目标类型。

    The following example

    // 指定的 DemoClass 必须存在或为可访问的 stub
    -"com.example.demo.DemoClass".toClass<DemoClass>()
    -

    你还可以设置在获取到这个 Class 时是否自动执行其默认的静态方法块,默认情况下不会执行。

    The following example

    // 获取并执行 DemoClass 默认的静态方法块
    -"com.example.demo.DemoClass".toClass(initialize = true)
    -

    默认的静态方法块在 Java 中使用如下方式定义。

    The following example

    public class DemoClass {
    -
    -    static {
    -        // 这里是静态方法块的内容
    -    }
    -
    -    public DemoClass() {
    -        // ...
    -    }
    -}
    -

    String.toClassOrNull - ext-method

    fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
    -
    inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过字符串类名转换为 loader 中的实体类。

    找不到 Class 会返回 null,不会抛出异常。

    Function Example

    用法请参考 String.toClass 方法。

    classOf - method

    inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过 T 得到其 Class 实例并转换为实体类。

    Function Example

    我们要获取一个 ClassKotlin 下不通过反射时应该这样做。

    The following example

    DemoClass::class.java
    -

    现在,你可以直接 cast 一个实例并获取它的 Class 对象,必须在当前 ClassLoader 下存在。

    The following example

    classOf<DemoClass>()
    -

    若目标存在的 Classstub,通过这种方式,你还可以自定义 Class 所在的 ClassLoader

    The following example

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -classOf<DemoClass>(customClassLoader)
    -

    String.hasClass - ext-method

    fun String.hasClass(loader: ClassLoader?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过字符串类名使用指定的 ClassLoader 查找是否存在。

    Function Example

    你可以轻松的使用此方法判断字符串中的类是否存在,效果等同于直接使用 Class.forName

    The following example

    if("com.example.demo.DemoClass".hasClass()) {
    -    // Your code here.
    -}
    -

    填入方法中的 loader 参数可判断指定的 ClassLoader 中的 Class 是否存在。

    The following example

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -if("com.example.demo.DemoClass".hasClass(customClassLoader)) {
    -    // Your code here.
    -}
    -

    Class.hasField - ext-method

    inline fun Class<*>.hasField(initiate: FieldConditions): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找变量是否存在。

    Class.hasMethod - ext-method

    inline fun Class<*>.hasMethod(initiate: MethodConditions): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找方法是否存在。

    Class.hasConstructor - ext-method

    inline fun Class<*>.hasConstructor(initiate: ConstructorConditions): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找构造方法是否存在。

    Member.hasModifiers - ext-method

    inline fun Member.hasModifiers(conditions: ModifierConditions): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找 Member 中匹配的描述符。

    Class.hasModifiers - ext-method

    inline fun Class<*>.hasModifiers(conditions: ModifierConditions): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找 Class 中匹配的描述符。

    Class.field - ext-method

    inline fun Class<*>.field(initiate: FieldConditions): FieldFinder.Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找并得到变量。

    Class.method - ext-method

    inline fun Class<*>.method(initiate: MethodConditions): MethodFinder.Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找并得到方法。

    Class.constructor - ext-method

    inline fun Class<*>.constructor(initiate: ConstructorConditions): ConstructorFinder.Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    查找并得到构造方法。

    Class.generic - ext-method

    fun Class<*>.generic(): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
    -
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前实例的类操作对象。

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    遍历当前类中的所有变量。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html b/docs/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html deleted file mode 100644 index 1f45937..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - BaseFinder - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    BaseFinder - class

    abstract class BaseFinder
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是 ClassMember 查找类功能的基本类实现。

    BaseFinder.IndexTypeCondition - class

    inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    字节码下标筛选实现类。

    index - method

    fun index(num: Int)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置下标。

    index 小于零则为倒序,此时可以使用 IndexTypeConditionSort.reverse 方法实现。

    可使用 IndexTypeConditionSort.firstIndexTypeConditionSort.last 设置首位和末位筛选条件。

    index - method

    fun index(): IndexTypeConditionSort
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到下标。

    IndexTypeConditionSort - class

    inner class IndexTypeConditionSort internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    字节码下标排序实现类。

    first - method

    fun first()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置满足条件的第一个。

    last - method

    fun last()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置满足条件的最后一个。

    reverse - method

    fun reverse(num: Int)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置倒序下标。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html deleted file mode 100644 index 01ecb04..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - CountRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    CountRules - class

    class CountRules private constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个模糊 ClassMember 数组 (下标) 个数条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    Int.isZero - i-ext-method

    fun Int.isZero(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否为 0。

    Int.moreThan - i-ext-method

    fun Int.moreThan(count: Int): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    大于 count

    Int.lessThan - i-ext-method

    fun Int.lessThan(count: Int): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    小于 count

    Int.inInterval - i-ext-method

    fun Int.inInterval(countRange: IntRange): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    countRange 区间 A ≤ this ≤ B。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html deleted file mode 100644 index 39dd619..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - ModifierRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ModifierRules - class

    class ModifierRules private constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个 ClassMember 描述符条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    isPublic - i-ext-field

    val isPublic: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 public

    isPrivate - i-ext-field

    val isPrivate: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 private

    isProtected - i-ext-field

    val isProtected: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 protected

    isStatic - i-ext-field

    val isStatic: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 static

    对于任意的静态 ClassMember 可添加此描述进行确定。

    Notice

    Kotlin → Jvm 后的 object 类中的方法并不是静态的。

    isFinal - i-ext-field

    val isFinal: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 final

    Notice

    Kotlin → Jvm 后没有 open 符号标识的 ClassMember 和没有任何关联的 ClassMember 都将为 final

    isSynchronized - i-ext-field

    val isSynchronized: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 synchronized

    isVolatile - i-ext-field

    val isVolatile: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 类型是否包含 volatile

    isTransient - i-ext-field

    val isTransient: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 类型是否包含 transient

    isNative - i-ext-field

    val isNative: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 类型是否包含 native

    对于任意 JNI 对接的 Method 可添加此描述进行确定。

    isInterface - i-ext-field

    val isInterface: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Class 类型是否包含 interface

    isAbstract - i-ext-field

    val isAbstract: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 abstract

    对于任意的抽象 ClassMember 可添加此描述进行确定。

    isStrict - i-ext-field

    val isStrict: Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    ClassMember 类型是否包含 strictfp

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html deleted file mode 100644 index 8606526..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - NameRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    NameRules - class

    class NameRules private constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个模糊 ClassMember 名称条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    String.isSynthetic - i-ext-method

    fun String.isSynthetic(index: Int): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否为匿名类的主类调用对象。

    String.isOnlySymbols - i-ext-method

    fun String.isOnlySymbols(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有符号。

    String.isOnlyLetters - i-ext-method

    fun String.isOnlyLetters(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有字母。

    String.isOnlyNumbers - i-ext-method

    fun String.isOnlyNumbers(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有数字。

    String.isOnlyLettersNumbers - i-ext-method

    fun String.isOnlyLettersNumbers(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有字母或数字。

    String.isOnlyLowercase - i-ext-method

    fun String.isOnlyLowercase(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有小写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    String.isOnlyUppercase - i-ext-method

    fun String.isOnlyUppercase(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    是否只有大写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html deleted file mode 100644 index 21e2d89..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - ObjectRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个任意对象条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html deleted file mode 100644 index a32e9c4..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - DexClassFinder - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    DexClassFinder - class

    class DexClassFinder internal constructor(
    -    private val context: Context?,
    -    internal var name: String,
    -    internal var async: Boolean,
    -    override val loaderSet: ClassLoader?
    -) : ClassBaseFinder
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Class 查找类。

    可使用 BaseDexClassLoader 通过指定条件查找指定 Class 或一组 Class

    Notice

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    companion object - object

    Change Records

    v1.0.0 first

    clearCache - method

    fun clearCache(context: Context, versionName: String?, versionCode: Long?)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    清除当前 DexClassFinderClass 缓存。

    适用于全部通过 ClassLoader.searchClass 获取的 DexClassFinder

    fullName - field

    var fullName: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 完整名称。

    只会查找匹配到的 Class.getName

    例如 com.demo.Test 需要填写 com.demo.Test

    simpleName - field

    var simpleName: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 简单名称。

    只会查找匹配到的 Class.getSimpleName

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 会为空,此时你可以使用 singleName

    singleName - field

    var singleName: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 独立名称。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 只需要填写 Test$InnerTest

    from - method

    fun from(vararg name: String): FromPackageRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置在指定包名范围查找当前 Class

    设置后仅会在当前 name 开头匹配的包名路径下进行查找,可提升查找速度。

    例如 ↓

    com.demo.test

    com.demo.test.demo

    Notice

    建议设置此参数指定查找范围,否则 Class 过多时将会非常慢。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 标识符筛选条件。

    可不设置筛选条件。

    fullName - method

    fun fullName(value: String): ClassNameRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 完整名称。

    只会查找匹配到的 Class.getName

    例如 com.demo.Test 需要填写 com.demo.Test

    simpleName - method

    fun simpleName(value: String): ClassNameRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 简单名称。

    只会查找匹配到的 Class.getSimpleName

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 会为空,此时你可以使用 singleName

    singleName - method

    fun singleName(value: String): ClassNameRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 独立名称。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 只需要填写 Test$InnerTest

    fullName - method

    fun fullName(conditions: NameConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 完整名称条件。

    只会查找匹配到的 Class.getName

    simpleName - method

    fun simpleName(conditions: NameConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 简单名称条件。

    只会查找匹配到的 Class.getSimpleName

    singleName - method

    fun singleName(conditions: NameConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 独立名称条件。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    extends - method

    inline fun <reified T> extends()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 继承的父类。

    extends - method

    fun extends(vararg name: String)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 继承的父类。

    会同时查找 name 中所有匹配的父类。

    implements - method

    inline fun <reified T> implements()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 实现的接口类。

    implements - method

    fun implements(vararg name: String)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 实现的接口类。

    会同时查找 name 中所有匹配的接口类。

    anonymous - method

    fun anonymous()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    标识 Class 为匿名类。

    例如 com.demo.Test$1com.demo.Test$InnerTest

    标识后你可以使用 enclosing 来进一步指定匿名类的 (封闭类) 主类。

    noExtends - method

    fun noExtends()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 没有任何继承。

    此时 Class 只应该继承于 Any

    Notice

    设置此条件后 extends 将失效。

    noImplements - method

    fun noImplements()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 没有任何接口。

    Notice

    设置此条件后 implements 将失效。

    noSuper - method

    fun noSuper()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 没有任何继承与接口。

    此时 Class 只应该继承于 Any

    Notice

    设置此条件后 extendsimplements 将失效。

    enclosing - method

    inline fun <reified T> enclosing()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 匿名类的 (封闭类) 主类。

    enclosing - method

    fun enclosing(vararg name: String)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 匿名类的 (封闭类) 主类。

    会同时查找 name 中所有匹配的 (封闭类) 主类。

    FromPackageRules - class

    inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    包名范围名称过滤匹配条件实现类。

    absolute - method

    fun absolute()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置包名绝对匹配。

    例如有如下包名 ↓

    com.demo.test.a

    com.demo.test.a.b

    com.demo.test.active

    若包名条件为 com.demo.test.a 则绝对匹配仅能匹配到第一个。

    相反地,不设置以上示例会全部匹配。

    ClassNameRules - class

    inner class ClassNameRules internal constructor(private val name: ClassRulesData.NameRulesData)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    类名匹配条件实现类。

    optional - method

    fun optional()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置类名可选。

    例如有如下类名 ↓

    com.demo.Test fullName / Test simpleName

    defpackage.a fullName / a simpleName

    这两个类名都是同一个类,但是在有些版本中被混淆有些版本没有。

    此时可设置类名为 com.demo.Test fullName / Test simpleName

    这样就可在完全匹配类名情况下使用类名而忽略其它查找条件,否则忽略此条件继续使用其它查找条件。

    member - method

    inline fun member(initiate: MemberRules.() -> Unit): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 满足的 Member 条件。

    field - method

    inline fun field(initiate: FieldRules.() -> Unit): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 满足的 Field 条件。

    method - method

    inline fun method(initiate: MethodRules.() -> Unit): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 满足的 Method 条件。

    constructor - method

    inline fun constructor(initiate: ConstructorRules.() -> Unit): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Class 满足的 Constructor 条件。

    Result - class

    inner class Result internal constructor(internal var isNotFound: Boolean, internal var throwable: Throwable?) : BaseResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Class 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建监听结果事件方法体。

    get - method

    fun get(): Class<*>?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Class 本身。

    若有多个 Class 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    若你设置了 async 请使用 wait 方法。

    all - method

    fun all(): HashSet<Class<*>>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Class 本身数组。

    返回全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    若你设置了 async 请使用 waitAll 方法。

    all - method

    fun all(result: (Class<*>) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Class 本身数组 (依次遍历)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将不会执行。

    若你设置了 async 请使用 waitAll 方法。

    wait - method

    fun wait(result: (Class<*>?) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Class 本身 (异步)。

    若有多个 Class 结果只会回调第一个。

    在查找条件找不到任何结果的时候将回调 null。

    你需要设置 async 后此方法才会被回调,否则请使用 get 方法。

    waitAll - method

    fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Class 本身数组 (异步)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将回调空的 HashSet

    你需要设置 async 后此方法才会被回调,否则请使用 all 方法。

    onNoClassDefFoundError - method

    fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    监听找不到 Class 时。

    ignored - method

    fun ignored(): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    此时若要监听异常结果,你需要手动实现 onNoClassDefFoundError 方法。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html deleted file mode 100644 index 2679f99..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - ConstructorRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ConstructorRules - class

    class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Constructor 查找条件实现类。

    paramCount - field

    var paramCount: Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 标识符筛选条件。

    可不设置筛选条件。

    emptyParam - method

    fun emptyParam()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 空参数、无参数。

    param - method

    fun param(vararg paramType: Any)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    Pay Attention

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    param - method

    fun param(conditions: ObjectsConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数条件。

    Pay Attention

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    paramCount - method

    fun paramCount(numRange: IntRange)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html deleted file mode 100644 index 23bab72..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - FieldRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    FieldRules - class

    class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 查找条件实现类。

    name - field

    var name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 名称。

    type - field

    var type: Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 名称条件。

    type - method

    fun type(conditions: ObjectConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 类型条件。

    可不填写类型。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html deleted file mode 100644 index cab6a63..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - MemberRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    MemberRules - class

    class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Member 查找条件实现类。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Member 标识符筛选条件。

    可不设置筛选条件。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html deleted file mode 100644 index 6302eef..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - MethodRules - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    MethodRules - class

    class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 查找条件实现类。

    name - field

    var name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 名称。

    paramCount - field

    var paramCount: Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    returnType - field

    var returnType: Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 返回值。

    可不填写返回值。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 标识符筛选条件。

    可不设置筛选条件。

    emptyParam - method

    fun emptyParam()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 空参数、无参数。

    param - method

    fun param(vararg paramType: Any)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Method 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    Pay Attention

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    param - method

    fun param(conditions: ObjectsConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数条件。

    Pay Attention

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    name - method

    fun name(conditions: NameConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 名称条件。

    paramCount - method

    fun paramCount(numRange: IntRange)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    returnType - method

    fun returnType(conditions: ObjectConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 返回值条件。

    可不填写返回值。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html b/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html deleted file mode 100644 index d763444..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - MemberRulesResult - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    MemberRulesResult - class

    class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当前 Member 查找条件结果实现类。

    none - method

    fun none(): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Member 在查找条件中个数为 0

    count - method

    fun count(num: Int): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数。

    count - method

    fun count(numRange: IntRange): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数范围。

    count - method

    fun count(conditions: CountConditions): MemberRulesResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Member 在查找条件中需要全部匹配的个数条件。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html b/docs/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html deleted file mode 100644 index a562df9..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - ConstructorFinder - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ConstructorFinder - class

    class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Constructor 查找类。

    可通过指定类型查找指定 Constructor 或一组 Constructor

    paramCount - field

    var paramCount: Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 标识符筛选条件。

    可不设置筛选条件,默认模糊查找并取第一个匹配的 Constructor

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    emptyParam - method

    fun emptyParam(): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 空参数、无参数。

    param - method

    fun param(vararg paramType: Any): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    Pay Attention

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    param - method

    fun param(conditions: ObjectsConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数条件。

    Pay Attention

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(num: Int): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数。

    若参数个数小于零则忽略并使用 param

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(numRange: IntRange): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(conditions: CountConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置在 classSet 的所有父类中查找当前 Constructor

    Notice

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Constructor 重查找实现类,可累计失败次数直到查找成功。

    constructor - method

    inline fun constructor(initiate: ConstructorConditions)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建需要重新查找的 Constructor

    你可以添加多个备选 Constructor,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Constructor<*>>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当在 RemedyPlan 中找到结果时。

    Function Example

    你可以方便地对重查找的 Constructor 实现 onFind 方法。

    The following example

    constructor {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, internal val throwable: Throwable?) : BaseResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Constructor 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建监听结果事件方法体。

    Function Example

    你可以使用 lambda 形式创建 Result 类。

    The following example

    constructor {
    -    // Your code here.
    -}.result {
    -    get().call()
    -    all()
    -    remedys {}
    -    onNoSuchConstructor {}
    -}
    -

    get - method

    fun get(): Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Constructor 实例处理类。

    若有多个 Constructor 结果只会返回第一个。

    Pay Attention

    若你设置了 remedys 请使用 wait 回调结果方法。

    Function Example

    你可以通过获得方法所在实例来执行构造方法创建新的实例对象。

    The following example

    constructor {
    -    // Your code here.
    -}.get().call()
    -

    你可以 cast 构造方法为指定类型的实例对象。

    The following example

    constructor {
    -    // Your code here.
    -}.get().newInstance<TestClass>()
    -

    Pay Attention

    若构造方法含有参数则后方参数必填。

    The following example

    constructor {
    -    // Your code here.
    -}.get().newInstance<TestClass>("param1", "param2")
    -

    all - method

    fun all(): ArrayList<Instance>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Constructor 实例处理类数组。

    返回全部查找条件匹配的多个 Constructor 实例结果。

    Function Example

    你可以通过此方法来获得当前条件结果中匹配的全部 Constructor

    The following example

    constructor {
    -    // Your code here.
    -}.all().forEach { instance ->
    -    instance.call(...)
    -}
    -

    give - method

    fun give(): Constructor<*>?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Constructor 本身。

    若有多个 Constructor 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Constructor<*>>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Constructor 本身数组。

    返回全部查找条件匹配的多个 Constructor 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(initiate: Instance.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Constructor 实例处理类,配合 RemedyPlan 使用。

    若有多个 Constructor 结果只会返回第一个。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(initiate: ArrayList<Instance>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Constructor 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Constructor 实例结果。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建 Constructor 重查找功能。

    Function Example

    当你遇到一种 Constructor 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchConstructor 捕获异常二次查找 Constructor

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    The following example

    constructor {
    -    // Your code here.
    -}.remedys {
    -    constructor {
    -        // Your code here.
    -    }
    -    constructor {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchConstructor - method

    inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    监听找不到 Constructor 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    Notice

    此时若要监听异常结果,你需要手动实现 onNoSuchConstructor 方法。

    Instance - class

    inner class Instance internal constructor(private val constructor: Constructor<*>?)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Constructor 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg args: Any?): T?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html b/docs/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html deleted file mode 100644 index 32ba34c..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - FieldFinder - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    FieldFinder - class

    class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 查找类。

    可通过指定类型查找指定 Field 或一组 Field

    name - field

    var name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 名称。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    type - field

    var type: Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    order - method

    fun order(): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    顺序筛选字节码的下标。

    name - method

    fun name(value: String): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 名称。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    name - method

    fun name(conditions: NameConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 名称条件。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    type - method

    fun type(value: Any): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 类型。

    可不填写类型。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    type - method

    fun type(conditions: ObjectConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Field 类型条件。

    可不填写类型。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置在 classSet 的所有父类中查找当前 Field

    Notice

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 重查找实现类,可累计失败次数直到查找成功。

    field - method

    inline fun field(initiate: FieldConditions): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建需要重新查找的 Field

    你可以添加多个备选 Field,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Field>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当在 RemedyPlan 中找到结果时。

    Function Example

    你可以方便地对重查找的 Field 实现 onFind 方法。

    The following example

    field {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建监听结果事件方法体。

    Function Example

    你可以使用 lambda 形式创建 Result 类。

    The following example

    field {
    -    // Your code here.
    -}.result {
    -    get(instance).set("something")
    -    get(instance).string()
    -    get(instance).cast<CustomClass>()
    -    get().boolean()
    -    all(instance)
    -    give()
    -    giveAll()
    -    onNoSuchField {}
    -}
    -

    get - method

    fun get(instance: Any?): Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Field 实例处理类。

    若有多个 Field 结果只会返回第一个。

    Function Example

    你可以轻松地得到 Field 的实例以及使用它进行设置实例。

    The following example

    field {
    -    // Your code here.
    -}.get(instance).set("something")
    -

    如果你取到的是静态 Field,可以不需要设置实例。

    The following example

    field {
    -    // Your code here.
    -}.get().set("something")
    -

    all - method

    fun all(instance: Any?): ArrayList<Instance>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Field 实例处理类数组。

    返回全部查找条件匹配的多个 Field 实例结果。

    Function Example

    你可以通过此方法来获得当前条件结果中匹配的全部 Field,其 Field 所在实例用法与 get 相同。

    The following example

    field {
    -    // Your code here.
    -}.all(instance).forEach { instance ->
    -    instance.self
    -}
    -

    give - method

    fun give(): Field?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Field 本身。

    若有多个 Field 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Field>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Field 本身数组。

    返回全部查找条件匹配的多个 Field 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(instance: Any?, initiate: Instance.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Field 实例处理类,配合 RemedyPlan 使用。

    若有多个 Field 结果只会返回第一个。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Field 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Field 实例结果。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建 Field 重查找功能。

    Function Example

    当你遇到一种 Field 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchField 捕获异常二次查找 Field

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    The following example

    field {
    -    // Your code here.
    -}.remedys {
    -    field {
    -        // Your code here.
    -    }
    -    field {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchField - method

    fun onNoSuchField(result: (Throwable) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    监听找不到 Field 时。

    ignored - method

    fun ignored(): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    Notice

    此时若要监听异常结果,你需要手动实现 onNoSuchField 方法。

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val field: Field?)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Field 实例变量处理类。

    current - method

    fun current(ignored: Boolean): CurrentClass?
    -
    inline fun current(ignored: Boolean, initiate: CurrentClass.() -> Unit): Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得当前 Field 自身 self 实例的类操作对象 CurrentClass

    cast - method

    fun <T> cast(): T?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field 实例。

    byte - method

    fun byte(): Byte?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Byte 实例。

    int - method

    fun int(): Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Int 实例。

    long - method

    fun long(): Long
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Long 实例。

    short - method

    fun short(): Short
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Short 实例。

    double - method

    fun double(): Double
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Double 实例。

    float - method

    fun float(): Float
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Float 实例。

    string - method

    fun string(): String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field String 实例。

    char - method

    fun char(): Char
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Char 实例。

    boolean - method

    fun boolean(): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Boolean 实例。

    any - method

    fun any(): Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Any 实例。

    array - method

    inline fun <reified T> array(): Array<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field Array 实例。

    list - method

    inline fun <reified T> list(): List<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到当前 Field List 实例。

    set - method

    fun set(any: Any?)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Field 实例。

    setTrue - method

    fun setTrue()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Field 实例为 true

    Pay Attention

    请确保实例对象类型为 Boolean

    setFalse - method

    fun setFalse()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Field 实例为 false

    Pay Attention

    请确保实例对象类型为 Boolean

    setNull - method

    fun setNull()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置当前 Field 实例为 null

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html b/docs/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html deleted file mode 100644 index a02bdc9..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - MethodFinder - class | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    MethodFinder - class

    class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 查找类。

    可通过指定类型查找指定 Method 或一组 Method

    name - field

    var name: String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 名称。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    paramCount - field

    var paramCount: Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    returnType - field

    var returnType: Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 返回值,可不填写返回值。

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 标识符筛选条件。

    可不设置筛选条件。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    emptyParam - method

    fun emptyParam(): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 空参数、无参数。

    param - method

    fun param(vararg paramType: Any): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Method 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    Pay Attention

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    param - method

    fun param(conditions: ObjectsConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数条件。

    Pay Attention

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    order - method

    fun order(): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    顺序筛选字节码的下标。

    name - method

    fun name(value: String): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 名称。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    name - method

    fun name(conditions: NameConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 名称条件。

    Pay Attention

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(num: Int): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数。

    若参数个数小于零则忽略并使用 param

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(numRange: IntRange): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(conditions: CountConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    returnType - method

    fun returnType(value: Any): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 返回值。

    可不填写返回值。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    returnType - method

    fun returnType(conditions: ObjectConditions): IndexTypeCondition
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置 Method 返回值条件。

    可不填写返回值。

    Pay Attention

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    设置在 classSet 的所有父类中查找当前 Method

    Notice

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 重查找实现类,可累计失败次数直到查找成功。

    method - method

    inline fun method(initiate: MethodConditions): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建需要重新查找的 Method

    你可以添加多个备选 Method,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Method>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    当在 RemedyPlan 中找到结果时。

    Function Example

    你可以方便地对重查找的 Method 实现 onFind 方法。

    The following example

    method {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建监听结果事件方法体。

    Function Example

    你可以使用 lambda 形式创建 Result 类。

    The following example

    method {
    -    // Your code here.
    -}.result {
    -    get(instance).call()
    -    all(instance)
    -    remedys {}
    -    onNoSuchMethod {}
    -}
    -

    get - method

    fun get(instance: Any?): Instance
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Method 实例处理类。

    若有多个 Method 结果只会返回第一个。

    Pay Attention

    若你设置了 remedys 请使用 wait 回调结果方法。

    Function Example

    你可以通过获得方法所在实例来执行 Method

    The following example

    method {
    -    // Your code here.
    -}.get(instance).call()
    -

    若当前为静态方法,你可以不设置实例。

    The following example

    method {
    -    // Your code here.
    -}.get().call()
    -

    all - method

    fun all(instance: Any?): ArrayList<Instance>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Method 实例处理类数组。

    返回全部查找条件匹配的多个 Method 实例结果。

    Function Example

    你可以通过此方法来获得当前条件结果中匹配的全部 Method,其方法所在实例用法与 get 相同。

    The following example

    method {
    -    // Your code here.
    -}.all(instance).forEach { instance ->
    -    instance.call(...)
    -}
    -

    give - method

    fun give(): Method?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Method 本身。

    若有多个 Method 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Method>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到 Method 本身数组。

    返回全部查找条件匹配的多个 Method 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(instance: Any?, initiate: Instance.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Method 实例处理类,配合 RemedyPlan 使用。

    若有多个 Method 结果只会返回第一个。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    获得 Method 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Method 实例结果。

    Pay Attention

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    创建 Method 重查找功能。

    Function Example

    当你遇到一种 Method 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchMethod 捕获异常二次查找 Method

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    The following example

    method {
    -    // Your code here.
    -}.remedys {
    -    method {
    -        // Your code here.
    -    }
    -    method {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchMethod - method

    inline fun onNoSuchMethod(result: (Throwable) -> Unit): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    监听找不到 Method 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    忽略异常并停止打印任何错误日志。

    Notice

    此时若要监听异常结果,你需要手动实现 onNoSuchMethod 方法。

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    Method 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg args: Any?): T?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg args: Any?): Byte?
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg args: Any?): Int
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg args: Any?): Long
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg args: Any?): Short
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg args: Any?): Double
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg args: Any?): Float
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg args: Any?): String
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg args: Any?): Char
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg args: Any?): Boolean
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg args: Any?): Array<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg args: Any?): List<T>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    执行 Method,指定 List 返回值类型。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html b/docs/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html deleted file mode 100644 index c4578c5..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - ComponentTypeFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ComponentTypeFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个预置反射类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html b/docs/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html deleted file mode 100644 index 83c501b..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - GraphicsTypeFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    GraphicsTypeFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个预置反射类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html b/docs/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html deleted file mode 100644 index fbb6320..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - ViewTypeFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    ViewTypeFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个预置反射类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html b/docs/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html deleted file mode 100644 index 71b7620..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - DefinedTypeFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    DefinedTypeFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个内部类型的定义常量类,主要用于反射 API 相关用法的延伸。

    VagueType - field

    val VagueType: Class<*>
    -

    Change Records

    v1.0.0 first

    Function Illustrate

    得到模糊类型。

    - - - diff --git a/docs/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html b/docs/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html deleted file mode 100644 index 1b41107..0000000 --- a/docs/en/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - VariableTypeFactory - kt | Yuki Reflection - - - - -

    Notice

    The English translation of this page has not been completed, you are welcome to contribute translations to us.

    You can use the Chrome Translation Plugin to translate entire pages for reference.

    VariableTypeFactory - kt

    Change Records

    v1.0.0 first

    Function Illustrate

    这是一个预置反射类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里open in new window 进行查看。

    - - - diff --git a/docs/en/config/api-example.html b/docs/en/config/api-example.html deleted file mode 100644 index d01af52..0000000 --- a/docs/en/config/api-example.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - API Basic Configs | Yuki Reflection - - - - -

    API Basic Configs

    The basic configuration method of YukiReflection is introduced here.

    YukiReflection can be used directly without some complex configuration, and does not conflict with Java's native Reflection API.

    You can configure some functions of YukiReflection before using it.

    Get the API Version

    You can get the current API version of YukiReflection as follows.

    The following example

    // Get the version name
    -val versionName = YukiReflection. API_VERSION_NAME
    -// Get the version code
    -val versionCode = YukiReflection. API_VERSION_CODE
    -

    You can judge the difference between different versions or display it in the about information by obtaining the version.

    Tips

    For more functions, please refer to YukiReflection.

    You can configure related functions through YukiReflection.configs { ... } method or YukiReflection.Configs.

    Custom Debug Log Tag

    You can use the following methods to customize the tag of the debug log.

    Logs inside the API will be printed using this tag.

    The following example

    // Via the configs method
    -YukiReflection.configs {
    -    debugTag = "YourCustomTag"
    -}
    -// Set directly
    -YukiReflection.Configs.debugTag = "YourCustomTag"
    -

    Enable or Disable Debug Mode

    You can use the following methods to enable or disable Debug mode.

    The Debug mode is disabled by default, and when enabled, detailed logs (such as the time spent on the reflective search function) will be printed to the console.

    The following example

    // Via the configs method
    -YukiReflection.configs {
    -    isDebug = true
    -}
    -// Set directly
    -YukiReflection.Configs.isDebug = true
    -

    Enable or Disable Debug Logs

    You can use the following methods to enable or disable debug logs.

    This function is enabled by default, and disable will stop YukiReflection output all logs.

    The following example

    // Via the configs method
    -YukiReflection.configs {
    -    isAllowPrintingLogs = true
    -}
    -// Set directly
    -YukiReflection.Configs.isAllowPrintingLogs = true
    -

    Use the configs Method to Configure

    In order to configure multiple features at once, you can directly use the YukiReflection.configs { ... } method to configure.

    The following example

    YukiReflection.configs {
    -    debugTag = "YourCustomTag"
    -    isDebug = true
    -    isAllowPrintingLogs = true
    -}
    -

    Tips

    For more functions, please refer to YukiReflection.configs method, YukiReflection.Configs.

    - - - diff --git a/docs/en/config/api-exception.html b/docs/en/config/api-exception.html deleted file mode 100644 index ae869ce..0000000 --- a/docs/en/config/api-exception.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - API Exception Handling | Yuki Reflection - - - - -

    API Exception Handling

    Exceptions are the main problems often encountered in the development process. Here are some common exceptions that may be encountered during the use of YukiReflection and how to deal with them.

    The exception description here will only synchronize the latest API version, and the exception of the older API version will not be described again, please always keep the API version up-to-date.

    Non-Blocking Exceptions

    These exceptions will not cause the app to stop running (FC), but will print E level logs on the console, and may also stop continuing to execute related functions.

    exception

    loggerE

    Method/Constructor/Field match type "TYPE" not allowed

    Abnormal

    A disallowed parameter type was set when looking up methods, constructors, and variables.

    The following example

    // Find a method
    -method {
    -    // ❗ Invalid type example is set
    -    param(false, 1, 0)
    -    // ❗ Invalid type example is set
    -    returnType = false
    -}
    -
    -// Find a variable
    -field {
    -    // ❗ Invalid type example is set
    -    type = false
    -}
    -

    Solution

    In the search, param, returnType, type only accept Class, String, VariousClass types, and parameter instances cannot be passed in.

    The following example

    // Find a method
    -method {
    -    // ✅ Examples of correct usage
    -    param(BooleanType, IntType, IntType)
    -    // ✅ Examples of correct usage
    -    returnType = BooleanType
    -    // ✅ The following scheme is also correct
    -    returnType = "java.lang.Boolean"
    -}
    -
    -// Find a variable
    -field {
    -    // ✅ Examples of correct usage
    -    type = BooleanType
    -}
    -
    exception

    loggerE

    NoSuchMethod/NoSuchConstructor/NoSuchField happend in [NAME]

    Abnormal

    The target method, constructor, and variable were not found when looking for methods, constructors, and variables.

    Solution

    Please confirm that your search criteria can correctly match the specified methods, constructors and variables in the target Class.

    exception

    loggerE

    Trying COUNT times and all failure by RemedyPlan

    Abnormal

    When using RemedyPlan to search for methods, constructors, and variables, the methods, constructors, and variables are still not found.

    Solution

    Please confirm the RemedyPlan parameter you set and the Class that exists in the current app, and try again.

    exception

    loggerE

    You must set a condition when finding a Method/Constructor/Field

    Abnormal

    No conditions are set when looking for methods, constructors, and variables.

    The following example

    method {
    -    // No conditions are set here
    -}
    -

    Solution

    Please complete your search criteria and try again.

    exception

    loggerE

    Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

    Abnormal

    The Class object to be searched for was not found via ClassLoader.searchClass.

    The following example

    customClassLoader?.searchClass {
    -    from(...)
    -    // ...
    -}.get()
    -

    Solution

    This is a security exception, please check the conditions you set, use the relevant tools to view the Class and bytecode object characteristics in the Dex and try again.

    exception

    loggerE

    Can't find this Method/Constructor/Field in [CLASS]: CONTENT Generated by YukiReflection#ReflectionTool

    Abnormal

    The methods, constructors, and variables that need to be found cannot be found by specifying conditions.

    The following example

    TargetClass.method {
    -    name = "test"
    -    param(BooleanType)
    -}
    -

    Solution

    This is a security exception, please check the conditions you set, use the relevant tools to view the bytecode object characteristics in the Class, and try again.

    exception

    loggerE

    The number of VagueType must be at least less than the count of paramTypes

    Abnormal

    Incorrect use of VagueType in Method, Constructor lookup conditions.

    The following example

    TargetClass.method {
    -    name = "test"
    -    // <Scenario 1>
    -    param(VagueType)
    -    // <Scenario 2>
    -    param(VagueType, VagueType ...)
    -}
    -

    Solution

    VagueType cannot be completely filled in method and constructor parameters. If there is such a requirement, please use paramCount.

    exception

    loggerE

    Field match type class is not found

    Abnormal

    An instance of Class for type was not found in the lookup criteria set when looking up the variable.

    The following example

    field {
    -    name = "test"
    -    // Assume that the Class of the type set here does not exist
    -    type = "com.example.TestClass"
    -}
    -

    Solution

    Please check if Class of type in the lookup condition exists and try again.

    exception

    loggerE

    Method match returnType class is not found

    Abnormal

    An instance of Class of returnType was not found in the search criteria set when looking up the method.

    The following example

    method {
    -    name = "test"
    -    // Assume that the Class of returnType set here does not exist
    -    returnType = "com.example.TestClass"
    -}
    -

    Solution

    Please check if Class of returnType in the lookup condition exists and try again.

    exception

    loggerE

    Method/Constructor match paramType[INDEX] class is not found

    Abnormal

    The Class instance subscripted by the index number of param was not found in the search conditions set when searching for methods and constructors.

    method {
    -    name = "test"
    -    // Assume that the Class with subscript "No.1" set here does not exist
    -    param(StringClass, "com.example.TestClass", BooleanType)
    -}
    -

    Solution

    Please check if the Class subscripted by the index number of param in the lookup condition exists and try again.

    Blocking Exceptions

    These exceptions will directly cause the app to stop running (FC), at the same time print E level logs on the console.

    exception

    NoClassDefFoundError

    Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

    Abnormal

    The Class object you were looking for was not found via String.toClass(...) or classOf<...>().

    The following example

    "com.demo.Test".toClass()
    -

    Solution

    Please check if the Class matched by the current string or entity exists in the current ClassLoader and try again.

    exception

    IllegalStateException

    ClassLoader [CLASSLOADER] is not a DexClassLoader

    Abnormal

    Use ClassLoader.searchClass to find Class but currently ClassLoader does not extends BaseDexClassLoader.

    Solution

    This situation basically does not exist, unless the current app references a Non-ART platform executable (which not realistic) or the current ClassLoader is null.

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    Abnormal

    All Class were not found when creating indeterminate Class objects using VariousClass.

    Solution

    After checking whether there is a matching Class in the current app and try again.

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    Abnormal

    The empty param method is preserved when looking up methods, constructors.

    The following example

    method {
    -    name = "test"
    -    // No parameters are filled in parentheses
    -    param()
    -}
    -

    Solution

    To identify this method, the constructor has no parameters, you can have a setter method as follows.

    The first way, set emptyParam (recommended)

    The following example

    method {
    -    name = "test"
    -    emptyParam()
    -}
    -

    The second way, set paramCount = 0

    The following example

    method {
    -    name = "test"
    -    paramCount = 0
    -}
    -
    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    Abnormal

    The DexClassFinder cache function searchClass(name = ...) is used in the System Framework ("android") app.

    The following example

    searchClass(name = "test") {
    -    from(...)
    -    // ...
    -}.get()
    -

    Solution

    Since the cache will store the found Class name in SharedPreferences, but the data directory does not exist in the System Framework, so please do not use this function in the System Framework.

    exception

    IllegalStateException

    Target Class type cannot cast to TYPE

    Abnormal

    Wrong type declared when converting string class name to target Class using Class.toClass, Class.toClassOrNull, GenericClass.argument methods.

    The following uses the Class.toClass method as an example.

    The following example

    // Assume the target type is Activity but it was wrongly cast to WrongClass type
    -val clazz = "android.app.Activity".toClass<WrongClass>()
    -

    Solution

    The following example

    // <Solution 1> Fill in the correct type
    -val clazz1 = "android.app.Activity".toClass<Activity>()
    -// <Solution 2> Do not fill in the generic declaration
    -val clazz2 = "android.app.Activity".toClass()
    -

    Please ensure that the generic type declared after executing the method is the specified target Class type, and you do not need to fill in the generic declaration if the target type is not sure.

    - - - diff --git a/docs/en/guide/home.html b/docs/en/guide/home.html deleted file mode 100644 index ac0ad3b..0000000 --- a/docs/en/guide/home.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - Introduce | Yuki Reflection - - - - -

    Introduce

    YukiReflection is a Reflection API based on the Java and Android platform.

    Background

    This is a set of simple and efficient Reflection API rebuilt based on Java native Reflection API using Kotlin.

    YukiReflection is also the core functionality that YukiHookAPIopen in new window is using.

    The name is taken from "ももくり" heroine Yuki Kuriharaopen in new window.

    Usage

    YukiReflection is fully built with Kotlin lambda syntax.

    It can replace Java's native Reflection APIopen in new window and implement a more complete reflection solution in a more human-friendly language.

    Language Requirement

    Please use Kotlin, the code composition of the API part is also compatible with Java, but the implementation of the basic reflection scene may not be used at all.

    All Demo sample codes in the document will be described using Kotlin, if you don’t know how to use Kotlin at all, you may not be able to use YukiReflection.

    Source of Inspiration

    YukiReflection was originally the core function integrated in the YukiHookAPIopen in new window project, and now it is decoupled so that this Reflection API can be used in any Java and Android platform project.

    Now, we only need to write a small amount of code to implement a simple reflection call.

    With Kotlin elegant lambda and YukiReflection, you can make your reflection logic more beautiful and clear.

    The following example

    "android.os.SystemProperties".toClass()
    -    .method {
    -        name = "get"
    -        param(StringClass, StringClass)
    -    }.get().call("ro.system.build.fingerprint", "none")
    -
    Class.forName("android.os.SystemProperties")
    -    .getDeclaredMethod("get", String::class.java, String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(null, "ro.system.build.fingerprint", "none")
    -
    - - - diff --git a/docs/en/guide/quick-start.html b/docs/en/guide/quick-start.html deleted file mode 100644 index 5c1e812..0000000 --- a/docs/en/guide/quick-start.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - Quick Start | Yuki Reflection - - - - -

    Quick Start

    Integrate YukiReflection into your project.

    Environment Requirements

    • Windows 7 and above / macOS 10.14 and above / Linux distributions (Arch/Debian)

    • Android Studio 2021.1 and above

    • IntelliJ IDEA 2021.1 and above

    • Kotlin 1.7.0 and above

    • Android Gradle Plugin 7.0 and above

    • Gradle 7.0 and above

    • Java 11 and above

    Project Requirements

    The project needs to be created using Android Studio or IntelliJ IDEA and the type is an Java or Android project and the Kotlin environment dependency has been integrated.

    Integration Dependencies

    We recommend using Kotlin DSL as the Gradle build script language and SweetDependencyopen in new window to manage dependencies.

    SweetDependency Method

    Add the repositories and dependencies in your project's SweetDependency configuration file.

    The following example

    repositories:
    -  # MavenCentral has a 2-hour cache,
    -  # if the latest version cannot be integrated, please add this
    -  sonatype-oss-releases:
    -
    -libraries:
    -  com.highcapable.yukireflection:
    -    api:
    -      version: +
    -  ...
    -

    After adding it, run Gradle Sync and all dependencies will be autowired.

    Next, deploy dependencies in your project build.gradle.kts.

    The following example

    dependencies {
    -    implementation(com.highcapable.yukireflection.api)
    -    // ...
    -}
    -

    Add repositories in your project build.gradle.kts or build.gradle.

    Kotlin DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
    -    maven { url("https://s01.oss.sonatype.org/content/repositories/releases/") }
    -}
    -

    Groovy DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral has a 2-hour cache, if the latest version cannot be integrated, please add this URL
    -    maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
    -}
    -

    Add dependencies in your project build.gradle.kts or build.gradle.

    Kotlin DSL

    dependencies {
    -    implementation("com.highcapable.yukireflection:api:<yuki-version>")
    -    // ...
    -}
    -

    Groovy DSL

    dependencies {
    -    implementation 'com.highcapable.yukireflection:api:<yuki-version>'
    -    // ...
    -}
    -

    Please change <yuki-version> to the latest version here.

    Pay Attention

    If your project is currently using the 1.x.x version of YukiHookAPIopen in new window, please do not integrate YukiReflection repeatedly, because YukiHookAPI already includes it functions and there are changes to related functions.

    Repeated integration will cause functional conflicts and cause exceptions.

    In this case, you should go to the Documentationopen in new window of YukiHookAPI view the corresponding usage tutorial.

    YukiHookAPI will be completely separated from YukiReflection in version 2.x.x, by which time you can use it with YukiHookAPI at the same time.

    Configure Java Version

    Modify the Java version of Kotlin in your project build.gradle.kts or build.gradle to 11 or above.

    Kotlin DSL

    android {
    -    compileOptions {
    -        sourceCompatibility = JavaVersion.VERSION_11
    -        targetCompatibility = JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = "11"
    -    }
    -}
    -

    Groovy DSL

    android {
    -    compileOptions {
    -        sourceCompatibility JavaVersion.VERSION_11
    -        targetCompatibility JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = '11'
    -    }
    -}
    -
    - - - diff --git a/docs/en/index.html b/docs/en/index.html deleted file mode 100644 index 1e000e7..0000000 --- a/docs/en/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - Home | Yuki Reflection - - - - -
    Yuki Reflection

    Yuki Reflection

    An efficient Reflection API for Java and Android built in Kotlin

    Get Started Changelog

    Light and Elegant

    A powerful, elegant, beautiful API built with Kotlin lambda can help you quickly implement bytecode finding and reflection functions.

    Cross-Platform Available

    Not only the Android platform, it is highly compatible with the Java API and can be used on any Kotlin on JVM project, wherever Java is available.

    Quickly Started

    Simple and easy to use it now! Do not need complex configuration and full development experience, Integrate dependencies and enjoy yourself.

    Bring it on! Let reflection become poetic and picturesque

    public class World {
    -
    -    private void sayHello(String content) {
    -        System.out.println("Hello " + content + "!");
    -    }
    -}
    -
    val newWorld = World()
    -classOf<World>().method {
    -    name = "sayHello"
    -    param(StringClass)
    -    type = UnitType
    -}.get(newWorld).call("YukiReflection")
    -
    - - - diff --git a/docs/images/logo.png b/docs/images/logo.png deleted file mode 100644 index 36848de5dd9e8b8f80e49ac6105c0f6b23aaa585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24862 zcmbTdWmuHm7dJXXNQsn^0)uoaEj^;Z(9+#40uS9VHqsy^A`(Nx(47WdGNiP0NGJ^g zXAl0*`EowJuh#`K``-87Yp?ZNz31&?4JA@ydSVC!LaK~-qz!@K!mvMt*TBfsf7cwr ze?zyf#Z@QU-}_YT=5)4yX1Gf*&b|^Es-({7FB;a9B{PfBju(L zq4Rm^%i;5NccA0;jovDCqmiyLG-uP|P=Iv$!6f}hSbhWwv3nD-d+ovVy3>|MbkI@E zFGc1xMFU@hu`~OzBdRzkrP63=VMXCy!O<}tl&m7n;YAs`TLai^U4xSn{GvBIa3D*8OVg>2c% ztWhc(m5S&38zd-Mh61_x(?8l45_uPI+{ByF%!J<&9p2D3m0y)&w8wF?$(57bMG-Ej zk3y49sE_*K*B(1QdJ_+l@$3#Sqd10wmoaXXf@%%H#@MZ_BQSf8YnI}=MiC#r<0jA^l5O`6!b}5RpcxW*`J;k*2g+=p_S{<6C zaxmSAJR-Dd1rS&}7J7l&yc7gmO#F*$MWKq4PAOtN@FTR*p?yvYLG= zT3^&Zty|#M^B=c^LXaI5+6ow|_?BC=!JA}m<9k9K4QP_}N086qYDW{tDaEn^MKN^Q zE@)>Q2&CVxM5B9cD!#>z`1J5$?R)6BD2ogs%y8^Q%#>^5ev$rZRivwMnm7bvnVMLP zV(wkrtVdi9(j2A8j*EVFGeuZywR(Q{N$fa?i5x9OG^p}15kMflMaD(v@h#@W2fi_X zi|M?~$p1cse5U&(XDJnqxoebd5w|Zmv`Yqo6q_4iYVGz9f;2)e&zQxs(In5A31Q!H z34Xacd$q>N@)yi_%K$wwDHgFpl`<450cqT5Kohu9z>P;%$tI$o?>q6%*hISiX9iYt zq$9A~59{8Plk@uU-plNIY77KpeR$Dkerv?5H8P|h!HC|3LLmIk2>r_;ywk~tzA2v? z1g`Zzgg8OZ%qw1HnxBU!ZVO^uuBN4QZgdjwBesIh`@impvyU&sjPPQwPo1H*uB)6D zzpY9}FF_z}f%-}%L(EDF!COB~`ocCnVz1*MuAPs?Y$;S1GL`9H_8~rAt!7BX8-+ME zP8nwo{rzwye>32_Az00Sp5X9d_&&1w)XpZs6MKd>W5c4<$P2NG)30xiQaH`VUv$8b zwr%GGzurU*wTfcin2iIm#m08p9t4I~bxN-^kQb9e+1d%2Adn1vibvYfka&4Kun^=q z!k7ZCy>!v}E4^*Q*UszBrZE_men75Fhl3!N-c31wS$%3|<5l@@T!CDf2q&y_TgtMu zi%!NC^~uwW1OkE68?Kv(77?^obv7+DQ1eAY7BUH#YiFt}4(Zm-l`}U3z?#~*JnOv= z9<&~Pcd>8t7EFnOEW`y9JiTw}RT_7wyy1gA7rckGYr|Ju+2TiSr>+^z3tH$msw3ty zxjesy(OYO|AeJsl-sU?+1edlkCrO*eaESZ%GvOvY)Lo7*?Vrds%%uHi zhTvsI-me&(%(y%|rQyJ|iYl62@!1i7?8yY}`9QAJfdke~j1Pws!fs3-1qZ4NU@p1W z700Uq#Z~z)s^OQvRIdPl8YPFPuGO}>j3<+vTCkrd#r^rWl%0NI*9O_Igpi$|nyK-d z0mk@Hl=9(rEwiwqg{UG;JsKY@Rav~>5al)Z)%U|r9XjV0Ih^v)gy2_F_$V_&wuLvA zhma)uoXdn{rsD;s;njvDK2{{#+J(~AjN&OToy)%&8tipbG766aTo7UyjQS5ib~wZ zKdpYVb8oO-fK8PUM*63qwWfZ{WM4{Xvh#)kpyh{UPB`jv>!;Mg8P+avl7LCO^C6Ad z_WR>P4gKEyU=HHjg()iZ&-a-XnekUBv-t*ORpXA}+1u2ih?hW=NVUdB`~8LBm>-&T z0&H7^up+yX`b*@wT;!;@?Z{TcZLkDeU;dO~u+0witkjNQ_^tk1PS;yZLDN14s;8|{ zk8ps~bbO$HYCn-{5xOQOJl~L1#eyvUKFd7uK~3*cL6N56inlk6nr$8iZ~UC<*Fmc) zQ{`Hgw9Vok3g;FwQ_6x(VA&+WGXwVN4G1feNJ7}33c(D3fxzUzi$L4d?&OBIM$fCYg4=_AM^n7{t&nq zGb`OtXSUb9*vI$vLrpeDF8_`)^uOHH4uV7Cyaq!WSqC++f<%Om3g0TS_)9EhO97V+ zZ8N7v#L%zfT)`XmwRl!gB6vx2`(A0IKzmM-`OA>Gqb<>AqcKFx*mu*0UTLYzo%Sqeltrf z6KfDy9M)f~*V?~MWkkaAo*4G&vZYxle?v(Km_n>QDAOM+v{3Z@yKc6^K3*-NVvo}$ zbG8+owoheK_4P^v;kb;#inX#$owq&B5UjS=&XdiWlLL=WIey}T_v!XqxG>^atTzgv zD72a3heiw&MCS%{W{X#(!-zW8CjTT{czmiZXbsUk$6X854dq&AMQ?(aA@R1TP?6xR z4^Ikiz$_-*m}7_B8qnBf9f`B&{(cELLv9L<-KmcF-dZ+yQ4x2c$T7o$WtbsFQJ3-g z^rw(-LF3-sMR7e44=kn%*E!>b%E_@B0cOOdjt zMSxGhdKQSZh^=SCRji8jW(i{d zhFz#(ZvEp{kbNZj`kMo0)A91#rMO*Q$(_KcV-Fj9tz&IGcqd_di#|56)uEI$GCfJ_ z^FQf5F-*kG{=n4I+ce*h(C#OJ^QR#B>1Wz=_ABujvSiD%op)+B+cq~P-7upmODW+z zXjN^{AM<7h3&VM~Qd@E_EKF%CVtoOrt#h;X#UWgat83S>+Y;-?5qX^@Zwtx!nDv;N z|1+9hNb#wn$pZpr@kKPr`=6sXi{GZTa9s)DJ6E!Xh0WYzLoD4a z;Nf2Wxu4|$|34lY+2m--deoleZc4Ig;&e63RejLKsCKML|HJ!x8}Ftnjq#u@thK%= zM;(y7Pkwb8MA*>DE28tvO(8Zi#VaLp&Dm+Z0#sK67bd+lXheFY;#wXn>{CED^_?O) zUn4BozVoPMl>R#3sp+>P)xbpzDxdS(?1vU9fA^yjF+7Uxo7MNN9v zyC&bT@4dIxt9a%kkI{=6tUrW7>r%>z6~GES`P@fZ2Fsqb7PRSMR&um zkWn|LRkBW&8l0!j2tAq3K3qu~eb?Wl30{G$lCO;^9j4@(Ws7^`u{j)c_BY94$9wbF zGwo;1hJi}YRennH@~qqjE)xQ0jC6h9qVI;85&b-S={m)O-)tW#@U-I`3s1wiY%67E zzvFkg3Hywqc6caEZm9AxcC{vNtsHeSvBhXgWqZaodrk{ot$D*o)%IGJ2U> zX7)M!#oxvtmm)(xUD53~kYA}i)~a#gO8Kp(5xac=h$_3+zbd=-epn+!3~bDC`k!Gp zpzowzzPUcf?$7)dKNj$MC&5ceyB13^jKWvVqL=edIm8-gOLe0LyCWNCxAVy(9Kvj@ z6M+}9ixE?DxMwR)a(?*6e`P_gv2MK^*(Jy9nw4#zpqq6R3Fw2d`$JOuo(vkuK4EfR zQs)rFkEp&{KuqNCWJ@O0Hemn7zX9r$j#7N5eZv23P$RNW-)iLy-#$k-x6{iEvKrV| zUOoHxp(4C^)SLnvJRpmSJw<26!x)VB2(QroRM|~sas-JDXd!-G#-tPK4f93fsc);N z2U3;bAQpQ?ctv$CUAC)macI-Zlu@tTtZ&y?T*bsD&dBqm-=jYc7_udiM?ez>!cq6|G|uykb(%>!^AsK2*^UCj1H zd67wc`2x4$Wl(D~mxK2=k&FmQ@Brymp`D}sJ^FIfXSgvww040a7KDZ>SKu`M5clUK z{^CUCa;66-tXlE)OeuCPM7%7gvw_I{@+^qQ;E~sxI00iLb?k$RF50c8)xZWD_Dg#O zD4Wpfevb;4XR&s?{e<2Gv4f0N{>rUY3*p$ww#lP+gErVr@{da299$>}qZ&)9`q5}U z>@y=nRD+oa+`h6r~*PT4o`Y7X|KW048Mbe{fJy1 zeaAQ;p|mM}W8&z2;jEzdb`myU$nZAmre9wu4H;>w9GR0?B@8QAW5tHm5Xiy3_;P*U zkDEJbQpmCkEY{nIY1aol&rdK=wpn>l@4&tvq8K<(&A1aEy8B~iVn!%H;C&(XW!t1t z@6bcRy}#C>RZE0ncK?o`ci$k%PzXt@3c;SR%wx5OGD73?DM&7^7txDo3)WX$y*sk> zJ;3GSZteT-SD|IVKp2kl|0AhrWL6Yy7IFSrTc^xbxeQy-g8Zm;%!MJbe<8kPox=%X z*gxYR&k=UX5d3OaoJ9@tFgDtnu=6$uO3N45kRXi1u7d!E>i#N^Dh2lidtA73KN|7*Af#RDJUto%&afP;2D zb!8mOU06}%dpZ2gJ^{l|C%Mh{`_>VAs{a5v+B9$$A+v%Kalm6sc7R@KLPzhYeV)}v zB3N$6>6N&m9H>cP*8d*j8TJp<5L2IB0o{?d5&;oZq-iX``W}D_i5HBD@v@$6u6=qU zYiKqw2r<&{bso0(CHU|+A>!50)p|s!1Gk^CE%W^&*27*%38pOeKSmFztq`(x-^0O@ z2YX<@O&In+rir)_gU}eeV!ZG>3829HSCWp+c;9CQcBJ;arQRTL1<#t%KTpWmT)fP# z(3w;w_*h}e%-~8S_zBg5UHEw9*k!s&a9zlBZHTX+zVrhz_0aj>`l)S>Hn4v<`i`g1 zfa`3Cdxb}$T&4eEfYPC)hQONiYJK~AlS~Mne}N@jm5UONU0Xy|@Ltjtiedg8g|y*U ze`YABJik&5iKk81uyTT=X3}>3J8A||WO%0CKU!9}uJOrZBd_m#&mt#HY5q}OM#u<; z;KQ`l6makdM1=Go`-aK?Pd>gJ^Tv_@F}}tM!~UQ8`X6ad|2z8s)kpbp{Q0K_KB_xA z9%k)9I-=`RphAFSgqh(8J`Nh!OWPvo%*l-3XLpc4gHmFZ`>vYnq|54B%I0= zS4)!xCgvN$PoC%p{H;6IxCTMKEWh?m=gn!3)nM+ksyCSJ5_A!Kl1`a<_Gd$Q<$0AR zy+9)x2ZH>?iuB{Dz>v*(nzjG%Ir#Pf&#;8-X?#Njx+ul1f=9;lYU`?NphgrO)$WNY z`77}SemZ~nlKH+6uLJ7CfM+PvUFmdb7QHN6W+@0Hi~=rww796vAAiPMCDD0{AxGVX zNbWyd%r;Yj4Cm_V?sT@Be1P}8p9D7`kO3Id&lSbTxB)f~>Oj<{uQm{))B|ZXf9^%a z=rBSdT|(HJm8WES_Vzmxv2P&oJ7{qKkZ|;iYW09+eIJG8q9cF0*$qpeNZ0SnXbQ~1h)&H9xf%J1KY;GJ!g5S&v?g`ELZb&{ zqGME*6e&aIL2*@?#R4a{*H15?MSNDPi^d9O)~a_p7!`q*edmW<51c@ z6l;v^$>G{)-FG)YR^1-7xrY%o0mC#w&XTl0)=3$Fi5Dk?(d~MKN_Wm2NT1br0yOa_ z@8Z5O5ZH_tt8J7!T4B1ouWXYDV2MpgK{3`)S?;iy$dVQz{?ywHKefFx_XX9hb^k#{ z0uUj*}qY+&#MdD}UUb_W4+KGv)AQF57iD%JFi_Jo8uQsbOKSO<} zW&fM;)6_&`vRYwau(rN)-F-bO^WS!fv3Ch8ZL01xPsjxeuDvCZ%1QUZf>R|nVY61{ z#58DYCxZFoZV?j%axa1+Hqw8)O2o(;9JF>Q?Or9|>a7o0LYyCJUnXD?-KH(y!qJyh zn3yifJ@Z?3Jh5*QBVabk-7N8|fl_3$f9mfONy8{qo<`VD;6bE22ocwsW!Vk_#g^A| zw?sJm=$Sv}#5tOUHyVf`kjG>=h}Y_)3ufg(9tyQ1KaIXh7WWPMjd|Uxz$|uN`J4>} zNO#@CbBy5+?^~5PtTTNzO$DP#?|hEx(AF(q&oN<2t3ZDDYrlI#5&E_{oSFz}kpN|{i1bC{`mAizofy0 z16E{JiovzT`n?t|zq%4$dwfM;-oWI*a!vYD;5C3$sG%r)8TT*V_#h zfLmja*l)lW<6m2P>1F%vT>9euSK9R#>A}6xeov;+Oh>Do(~F#(IjQQ$&u}5g zN7&|x4rh+B`gSQ-UQC2k4pYn+9US192hStKweNQGqWgbmY9u9&eu>5Yi&Q3%>(_yNkp1A8?(fYjeLkv>s1K>4s6dbDz zpjUP|$iBa6v7;m{0qr8t@!A)1*)y*9ZJ27V$3 zdADYM{m`vj&0}x`&gm%(3D-=ET%9hSb~|WpRHCy#y+pYy zE4s;RltUu4#38yMeE+#pwmV=zIUy`%bt1(ps1K+^4LZWtUf#oXV#8qgvxA0eVi(rw z!?-iWc{P4UacZcvdKJjgj0Shy>C{;*5O>BM}}s-}(VdL1@oOF2W(2S6p?=3KP>H z+UFv<_Vu^*Cz17`FrY_>8&JH}eUy^tA6(X%wV~QWr)5A$dHB9I02JVHB{}>*jo^2f zI4dBq$sf0NreBUW+DCw$$kHRFJ^`eTk^k{z?)5*_ZL*YDRW@yQYTWOyH8Y6Q*py!{ z><7~K_Ar%{ys|mp)%x-~D>#aN-#(v7SDRXQN)}j)oju66vNkqt6*Wh?${eqJHg3&5 zhC+}lyGv3o$J>uvMYP<(AsK4gX)yT~AP_+H0`{9T#J}#n@_qe^kOyXW7&P1eC^$U0 ziV`r(_A%7E$xkqzOfGvM)lPi_dEUUtn5dzS)kN1+s zT-hDX^f0A|rbkg_@x&7APhzNb&w3CIAs^1homXgG1(@uBe6Q{T@F|zx;P{&Xh^z%& z*tnk_(;44s419*u{*y>{3(qS)S>WWn@}4%svA!{&0c*%ALOrF+Aik40I&lwa~V(R4HZ@b7%Su&A%`6mm@Ax=$KY@Mfv;uTr5%Xr^$9}B}G19_Jg`Z+aHAN3U%$hg{BwP{a>cWQ{m&R44Jmx5bk97>c02@EJKG!UToB_G8j`pN@HklKHzI7)n?OH4(n9J1yG!nR#wNJz;dh#Fll^bX$8?Kb z%2hlF3Kw+$4@}*pkLC!b#*|k}ea#d+e{H|bOFxeR+H!XnE`I00{(vuh}B3kaU|VY#ef& zQ3*5K&{EoE3;M6oR(d`7&!puv12FZL+<4?7rnWgR@}^54rbwW-x?MfL?2W6MjMs-o zmn<-rny;z;Wl_Ds#Nc^8{K69#@>dD+;7)Xua-PhO_zGGT1G_Sb%s8)eF@Usy+3W*Q zk7={OBWGJ#fA`xlj10Yz6fQBYCo;xv1_W?hKp7h^17m}Fu-1LRBIKBVTioTWjbl9V zo7AJNjkxsve1mS|CAGhPLBB`3$KF5x;>8eJA7W-YCkH{j;&kba)w_GBLgTA~Po~K1 zFog3X-BmJfGEnJhA*F!@C=GYt3YVCK_luRl2#-WlO`s%DA(x~O<>nG&nkQAz@}u>nb}V168s-)XJghMHr9Y(6lEMPkTGZ? zKIQejxQH=e5a8th0EUg+Q=vD42lWw`K8_i9~Hm8^PUN zrq@AqX(>twb1Y0g%~95*=C}C4U+rHe^Ph~5kFuEyx+tt!l#eu^q5!x91Tzj{YN373 zs`QT}@#`q(T42WfC8#v%_8zduo3D9ZxjEr6WX5`QG$Pq80Yup7N5GT>*um*b>d>}M z23}{wUb{d~3RW73Ydz0{{TR#ck0Bv&Nsz#ErXSjpJ`=nsE-_Ry8TeGq17b{3&9Pme zeEY;FHG~4!lNPG+lKsjUw@(d91G@UQKfg{39S!m1@KXVJfrF0!E8PRQZvJ_doRsQ9}$SP>wFH{jdUOZ zHWe;L4xf*Dc&`29g}~IaIJ9S(aI&U4K}gAP1 zi=DUoLm>s^fBcE&_BEAvB2{R>U7fdHE;0MthD{F*v}eg z$|ut)o6lL*P!%OR)dVGrWrlanG4>hg*)lVBilQs40yJ+0DA2-Op$w-(UwG(<`Momx-3_;J*g@50?%be@dB*+() zU}m5tH?DL3lM`zw2^8V;C0(bLj87^1iRN~chd+C$OD=UEb^_;oMhM%TY|Pfa1eJz` zm6wh56KQ4S2m^nN*Y4w1-9yV}QV@V*CA{-~_%}WNxQ|Gg#LrQazmAgkP2*>8U&V`# z>`bOO&{Z+r_*r_NIom#!1~gPk-+O71+YHSdG3r%ka`w>UxxJ_1^;LYxaSY_Su3x!k zq2E1qM;)yO%cyf@p94gPNN#$ypPSmoo@D?Cu^joC_@3b>8N5X$pQ2_+P2ZFo0}Ilr zXmC`rx{~E}5g>8dBT|9cbDHx>F8x@JW$rE$D-01O{u(7nRuk?*meVU$&&y36JMFke4KK8DXhb*K4&43|c zdK#Jt&JHsJmSs;&;)l)4Geu0b2_>(Cg8ACJC#HhH4=Tx{AI6Fe9;r-?wKq$cHWaG{ zlnfN8B?n@>%0gAJAzXO1=Xw3|>BUcGMR`!;jzq$|vA}2AN8j@n(pV;l!_ zgMUf@yCp-`@(y2rdl|Z(MXLQ_QP?k6!s>Da6S`X1ubtv~xwSUM>aLks{NF)PLkMHJ zh$0IF#z+f&z@x{yo_7wE>7%prymzLTlfm8-BNfs3kV#N*0@{E>sNI+Bwl59}7~Xsr z4lN>#($cX1RYJf)m(yj~kIp8I*Him{YZ!RC2&hPni64gOd#WWYw*Ps*a4P!d(|t|| z>=q#mQT;4_KboLXvSd&-*(L2Vuujxz`xo+2~r}bkr%6Yj?~Oz;C2EZ zfR&S$hT3}n__>w=F@OgD;-@gmVkOgbxM%J{oA9=qQ!ocOajF2Dw_ZyzYQxxE4bntbp1a^l+PLJW<4;ze7gL z__=r8G7ruB*@_#3BpSdbFzb}XDl5HStR^p6s(#>9aTT5-Jz0^kcg3hx6G#4Uwt4~H z-?32=q!)}0=AyKm@b0ROc0dxjJ&uL&yVF?s1fXb`!swZ4QlaT?U8)s&3?3W-d1g zvTglJ7+W?osPJ&RuDW<@T<`c9-QEA$84B{M+q~=Tvg3NirUe|$J=lgZY#GE4%AB02 zVJdWy;d_wK@>uMEJUoFFnPJ!bo%2V6>36bZRCe~2k1>=2MA=0dpv2$gsEPxU{RfX4 z&~0~r)r7ZykHCdso`F58479(i|DDJeF}yN{a2xC~^{X*IL!1m^HdUw%qEN{bK1WZl zKeH6P{tVoLz&<}Z%oi~RiRgkkb9}Beb0#n)hD3^RNIMBe&Z`BKB|hYL1k07(zXmTO z$F%{9!or-291&-47U$Sn`_HVq7s*((;wKPK2CzIHa^pnTSgmP%TaAarG0h0n5`2rcK5w>`fM7? z_l=$$f_M|FsczYln&@$3rbuS_*_Ea^M{ zr2L9$uL}X(1i>McdY--`v`O(w6ewJsGVs#>uZ5xB6=Y;7JHFRtHWx}?XZ~VfbMgQ6 zSO2CrT7u-NFF%Pxk6*LEI9)rIq}tUcW-}hb2Zw-T6j-{To;Yo&wWXZRRsTsST#jGS zcVQ*4}XPu!U=tOn#q=D!esXcx(Af&_g$xw#loO%>7#m`dTF%-6DVU zH3W%qj;}f>X+1PkRE;jVR?rJ8V(K!;*~wYVIAO%kCPZnFyP0*Z+51$rUp3I;8>}#3 zkP3oK;-N1o$g$V8L7!YVixsB!8K>#%O;FF7*A=jc?OwLcHva1N0fKYPY1_hg@6)FL z5_(6D)KpffN%mr)2~iv5-rPf#9o1^Z3(iA46&}^<0x9}(wSZ~XCY%-@+5|pXvb6N< zGnY~%eesVowu(3Tt)X7nEL{G9piDjz30S-uZyIK9hljUI3B&Ku&`YCNlt3RcRqdfH7H*5f5dx8&{|MS+ zO|hCDERvgWh}+9Z2HbRa8G`Gp9h-}H$2~bE?vC+2HQ|i9!R|4YSfG3>obm0n7%~yd zF68DWA=)Zwwc+ROze}gh5!Jo5?BY1ub}W+fq}Z18u6#?KhEVskPfnk_R~ro;IXIW% z0XP>m1--jD$~0x35Mc*;ZpU|)D(QF0c2rw`pB{6s{%3Ma$lc}}lQcJsu*EA4)Smye=Bl7lL z4Gy;YTW*w}ueJ4nR-7e1j(|sV!fKw8ec27XE?LU^qi=-g8gpSit{QXfl! zJrQK*2ebZJd^=_I-Lwbv{v#zXSR-g;YUgQt z23~%2aou4Cy$0=P>QEu>?pJHYxX|f4NC@JicE8Kuo1iwdYK!GQYa=ZbS`opV*@lB= zps@DW*REeV{IE071o{=emtij4r@uoEGG6vsaq_{iQ)5+hqVud=vf?T{Pml-qjgo%d ze9SLKeqFbT&r+C)bKUi^LuoKvTu!IP##vYaZ>}~`TBY#+S=9H`rvm7_$_@tH(F7c82^<2LM-2N z3V&nLCv!18j+*7uEYiW0Gb7@SL{J@h{)_Uy=WHQ7K#ooBNcIJm9gm# zekzNFVcwF@m!1`QFXxi1CkmtZKeP0?H3=g8mas)~AUxc^kquM#4tW#WPe2DzRz&mHzmiS-qq|`)?7a0fKVN|IUM?ApgH4IH#>^g( zFAxOvf59xD3H*Y2w5H!=uN~|B3T7aL_19EJ94Qxd(TubEOtnNIzmY7`yngFvtgFl2 z*{XkTwr0jJjPo3XIuO*DVS6yd=u>h7F{Z3_9REFLcwpP6gstlpu}5Z>@nU0$m@sl8 zU#z)h;TKYH&zUl&yx?h5B`wLB7MX0vvsbh@%27k{%qHdAYq75hObv$UeSE@?5D`RE z;XImbl{2Q*BDanhj9&QV<+Cda6#njdr5;$9uT!FZ2bm!NG)7!Rzi29jU=z;fbSAmp zZzbom(o?ZFri!gwz$;(9I{b!%$Pw`$fKcw-tp1PX=x;`O{Ku>cw7!7y79+YBP7G`> zDv69_D92A~0(3SEKo2Y4EHh4EZmog1j+}a&ee6$&N1dj&7sum1#_IghMjc)G>Kv{9 zMNytz5-6S_lFo2l&^+#m*lbi!H6tS?j-sHC3vp+*Rk>%?FSIJFEOuJD_w7$v_3KCM zK4&GbU#;aQYr3RCEZY^OPyA_U*W<^woRad<^0#-tr~V;wZI9?E93sK0bCu0=@F{;kzQ)Cio&4mkiZOAltIp{ z@^~VubD1G$`_9hioCz-DAeN&vt%&>{v8VsNDe==H8w@eUZQDpo4f9p|(?9wl$3e3* zV%gm_*}I+O*hKHG{M(gu~s-J%|L;j!4J z!$ET!g-x}bnlKY(uQi(bHMF{#Ok33JgC5kEWqfJ40lssDPY7$nDSn_?3a(P*y@5VT zC1n|;lppA#15tBTIsf_UdDg)P_~;+qN>wO*2VTAK=Q|go%$KQmxl;B5+f;x`+jbNX zt)G8bATeRSwG#PKt;UbAn*if2qpkGWo4vbxS@`dKY`_BnX(|qT9L0O$PnSrDpQmjK z#c6@4>%CT`J1+dwIOR>CZK;se~RD(H5k%tQ`u5eKc9@SOQ{QC zDpdZ^4WTy>9GFgY%n2hLoe3FRPkgeaHFIqU_?Ynxr283555n+{8w5k zHOWdvgy`k_FRm;NlKr4?QO7dhy|~dpDXiIVUc@iUr?7)?$p^`xdq)#kE*^ zcIb_uIGk z@a{Q&f0{}G=DS_8f-KDvYKxMK35lS5uriA;!EiFLt| zi!{!25upcVmMp#@8g+(0sH?bxcyZqn`x`)*7J}>TU+7@ICsYaA>4Xy3`;~mdXFz4M zV#*WxW{sFZwwc=6)$l8_a)J~URYwb@wvk#304!&{B=XC=Mi ztz1he$vvDnMvw`Lqxg`0TuTe-9H1-8*|9j&oC|J!q?XD=j+gCM4T>S39tN(CK3HFR z^mh(aUETJcnYOew^(2(lU%)hii?(y@QQ~phYxLIXi z7XRQ7F|Rt;I}_p(46;G(H;eZ(oMpaCV{vsjY1xGPuChRa)H<@NfR=fb%hme+eRfhc z_F=slF7w-Sf}S@QEP|bw3=5Ut06$XR1ncU?%Y3@@V>i)3E%w95)0+e6()+`iQhlF{ z+}t;!K%_0w65*g*(xXVxs0CFAgh_whFYPFNgxP!ns#0bKnEO`uq=;GCp|(ww7758u zwClw#TX}~TYIO(~;O;Ag3lz}@{+GEz{9bi(H>{mvdut1f{{-c8Ja{0GMoPWs6WQ~L zh~dHG&r3*e6iy=GWu<$puetE8++< z+#hIPJ!&f-^22jvv6ySLYKa|!P`W)}Sfas;5N@S;bKQnsDvO+YQkULsO+8(UUy}lk zb2+d)&jBvh;@H4t+#tT(6kv&xvZABvJ1kET zX6H#^5c<;e?t&du#vj5Q8@}SY$GqKoNuF1TEiZ{w zO-6+U&0HfPr6Gv5y~8PG1?^@5+jX6y z1ltmqxBO91gNc`vklbcTu8)ZBXjLPO6t~Qj>Tz2STjPzFTI4Wg5WJGy!!4?A7Q5*- z9H^Z4jV7bJqNZHR?Dwn-zg4DsVz+ILa#2#=%^G%^|B(7h5GWEKbY41o!2KF+meq#T zr-h1`UT347XGxv%Ua)5DmCgtdhYY4CDfXawyQ!UX-YsH=^9Y#@KiJ|Da&pG9fijLI z(J~?+(*QJ-CWn4Dr0z3dJA<7h1J9~^ZcQePXc!hlq4A(hLH(ahOq#^6kaAE;PXcwl zUU3x#Sy6+h6+F!{=eIe!4+3fW+i&v0n&oASp_jWY`-6|U)5W}gUR!@os@;ZjV5gT| zmpNZv{_E55OJ;&dE%bMgIQ`DPrKPJ^qOTKcLqQvh*V2oNlr&OSQp(Yx!kme#e3)Q! z(29$y6%KLGEqsJ7dXV&r2%lWJFfs3DRjKAu%`+?$sK4IkOZ%$J@0vQU6FL5->Nk4< zTY>4j=$KBW#ONi*=cbulQ88>DQ==-%{y2oOguqZBHw$i>%H=5SB#ckz=lrrxA8jeQ8_whM*sC-M(sh# z@mr#^ehM2O6HYl6XG((poMt3=?yoSGh8>mQTFG`(#8Q@W$C6`f0FKgcs_BamrPn)T z?uyYY+UN*2OF2X(F1EP`X!DGk8dO#Zo<>xqnYO^_sC?_5-UF_sn*}ugwzaN|8B%a4-}m>oZ0-Tt%8qGwL^ zoT(Cs^u_QD+^#UjPkeqzU@el4yJ+h?TqaALZE^3Z-p~$ zDO~E0yWact1l~J({I^I@yI-Z6>!O;no%L=t*LJVq-WfdUo5^pE%C-B&AL`U|Li5< zLgB-qx*X>+c*rIA_P>~J8l&QaRltX#{{%0y+{8<8XOQPElW_r`OR|v9 z7?a-3Pv$)na4JFU1#+Id-0sYTO22X1v#@XX*f0}5X1oasevkcg29S^8NO^W9Nl?XX z6H>4nKt@J|AF0CKQ=niZk%p81ed1otYZ(~4oC^l-vrsQ&CdL=PWY!*I+MHv?%a^^_le5OdA2!r0B%cX2p8S!(AYOhA@>T5;o_UYjbDPMgo&P7~PZG z9~z6y1sdXVoC@;NGfn%DVA>?tp4h%u@$?y|^q_s8E^4?}VKOQ3yjMZ|PZgsiPSP{% zcNLznYP{ARGivIshuj^kSnSE}ZsBVwTk93EgJvFVH znr8v&b~;J&{CTDsCVfaMn-z~*bLH1SMUS4G|~le zwe7Hk+`DI=9MRpo&mp_xI*6|W^G?ojX;h zW^DKsX6>>~Gv@w?B-UMTj>lrm^1-|1ESbU8kIgi2xpFd819ng(p|Q8}=@?VQ`%kzp z@^yl=6o@X(K?DEXt4E>mX^*m&aI&(Nz+*e3G5gt)EG)n?p6AlMr8^VgI5g!8f0uRd zxbKdFau$~pcQ{qMvZ_`*7o9PkBz;mCIB6Ti{pdHVV_rf8_mQcWg#hxigBFU*^&=0h zyR?x=7AohyQ+F1Zm)gxpFd6=-Pk_e7PB{G9GLE;PTRnnOL2x;%8%yL(%L-F9^Q`3l zV}FC?=XzTCNT=mHuG~zQ_l?B3Xi}H~ACNd{(uYkNf0y2W7ev~9Fcw(gX1B3EeD3jV z8Ow~v$S{WYTF`gP)`#(2J@}`uup2@b>e$CLSx`>GG&*7)zOp_o_KNjzKP=OU+pZJ# z*lLNK(@y#wmRBW^=;B{(^2nXHkL@k zn}aFU2z!^^?LyPt5K_@E*MYX7 zjYrn^tL~WjzObovmcCUuo;w_>fcIH{PhT2`%8F=WWfpB9==B{ZJkMW-0IZI z6@oQj93Hk+K3*Xwcyy#502A_(z-j0m6d!3H#F z2WR1Su!iE?vZ@!(0qyGMwCXJJxrc@Bi;L>vVZ%vz4UVgY#=$KM1ejMAzyS1RyA@8&hM}6h1JQG+$ z09;4tO*17WT-~5$o&B^mT6PW+TfILgVM_5%_S`*ar3FLCIbKYqjbTUfn`Cv)~ z=vo9Qmk?49K?LB`p&jr*CIbW};I{iwrHc3+a6uj70_^|=*)pwiB~Km0K!884tGH^M zV^>x6zm-OPAQ+D$ruf8Lr=XcCGrbQgb_wBjK{ZZiCkIWefPt|+5ht-D-bfxGXggh~ z2i9|<`Mbc&{}x}+Q~?D_PG1&cUKtp0faII!q8v|w>FQZZJ2f|Y3X8(;m$}X zPFb(2L<*nQnK~F;d|ImF;hXp7sS*x=*!&rwGf$D(o@)abytxcG`(0hp>WHa?gC43bIRi!ub1Nvk$l!a2!)wv0JZW) z3f}(hf$MpINU>p9R&!;7Ptp5n4ghA;tCHe035z;sKV^fJCuQxt(ZHS^MS+s}X+IC2 zRh1_ep3gZ1a(+g8t{vFOHAu1oNtKOGYqtebuLe* zsytYh+G8!=PI#pn&j@LzD+> z{PfT{Py*BX0cX!gbWh%nmIF7}F86`Gyiy#d;1gK`yRI*0FUsk0+PxYeXbK78Azyk) zM?BGrRQA0Ti66e;bU~a2(MTK;}N-`&)UsVPXs#kOU zshT{Ma5Rha3w(oHr}b3^*B5jo%^7-2Y~R_S1oy73bB`+L8$MQ>$K8CFlTrbUM~HQ- z_Jjb1iB2S?*|Q2}+CmMowpdwJrf`k)g6$I74IeFP*dR z{mS$9nu3q97nkeTx0Uj`Le&R!;mi`p9yNLIQxFLe6?Ye{$GpP*F7b@~FyiJo^{p!J z1!5v9U|8Eg?~9vuvvHV6hj4m#b-C6{=<-35_fp!$Dxny~+&Mjf0|Kr0^UBVcpCi|6 zpy52nStGF|jUgmb5d;@ep;(sE*(tlTBjGCNWuXxz3IqUg4vRE;%k?qPA1?pYxE)Kf z9<#zilk=Ly8GBd6MMEHpA&8TjgG#>l?MEmf3}sTU+F__b5ZC>g4DJV%qo?t3xmLyY z?s5DSQd4qk#4o%2uBFg^QH<>WLH#Ap5)~2`P1z{NuGC6^Nr=p^B(KUP2gWZA9C}Hv zR<0|k_zTE<(0Mw8t_>S3#y$$~e!y3#&0kjl`G$KMO zv)_sTd_n!7r>r~b+VB}_nF#Jz@%EA%@?ji7oW(2H+bKLmzY@93Ur z_t~X-%A7lpB7EA2!vp1Vt=`*`3N_meNw|e12{YSn*0|%VS=Du0yIxHRS zM#>vREh>|4;FrK@I0S-!)N5I~axTN5*TEI3MclqkE@@7!R~v^_S=ErXiwkHv&O# z!AJE{q9qBdC#DacV<3nXap8&1*MR1hT5TaHxdtCLEKPt<68fI`e5YK+p~NbVKQ=k$ z*uTw+uH<;HfsE90^954GjC3yd_WAyAN6bY|Eb&vD&eOj@;x7BHuA){z%>_OPrdOqp z8|C&{smhZS-L#;@Jcm(g%FudEJPNOO;VijI&W@}tPco!Os0H4IH1KJ2ZO9)oE~A5A z*X1B5uFPsfQn3$|v5*@Tcn{;}gMbvaWmCyIm)8QJA&u^9215}VoI@0eB!SZl{uwtk zIQq~)dM`!#m++WKceo9c?-a>!Kv~gfEYSL?o|-B1ULM6mfwqPV@VX0+vk*Ttbgwnu2m-_2!fsMd6~o@?yC#U ziUZfp;CT7C*fY+TdrD!9q+Ss61`(_KSFOx=f-9 zw_I%cJ4p?szV~p%eU4$tMDAfy)zz9L%EvtDm> zDGoblGjpS0$28I!!jn$dFTCduQzN7+e0CEY68kolSNHZp$xUcqk>&QMalvsO^k}JG zqV-#bZp0I6a7VQo9MU|;rS(edjOCGQ5&KYBNgqcLvWZI(DKqQo*6Lg27N0@A#N8aP znp}%auuC5W(E2R%k3FMKYN`su*yB!RQ77?pKM#F=2h7_zvnGLT9LC>aKn3f)(|B3~ zdy<>Ipk?Z%>bMAH>%=ujBYMpiu7N)+hnIlBY>p9qd6|dIEYLKbE^>T*HR1-idROU% zGUqXES4UF;X2!?HJYk zBKCPe;|uQ@GoNdK>hZdqZ2Wo@`O026;#nW?%GRNrXJ^*z^Q$6hP@-Jd<0vJwHMMj0 z!!zdl@D>3~KaSo=FU`T!8%md&y5D^MWq=klaD4JUI+=7SG^B9 zH+sl?-8^H%7&c-s1#4nSQO~+!tmuihaR`iV*6?O!lZGBau_LbEVjAl;x=o!9LlV+Y z(*6T^E)cai^2ZvFWU6m1p}X-bUbB(>^RHORB=Wf5gg7_Wx_LheIyRuTxGzj^{+Ih~ z{=;2+cXk*K-B_E7vyM%eL%vo-nXy9NCt)7U$MQ!f~Cu8 zP@GU4cm>Z8O=4vh{#u@J4~a^!QxZ#3!Zo%S0ry{B z6&%`o@L=VK_CDI9rGiC(p3dWjrGrxRw$wz*RepCea(qE9l^KzxBL+vW>l;0@!T4Q7 z3fF<5aq%>d>ihZE8&M|)=035tU}B>Mog!G3lXW*AF7A|}%;O$hBtDd0xGz^%Gep^( zAw~Csnn-kg++4?D2l~A(x-0fjGU>tVk%gPOOi%5`t@P2z!6wd7%ZzWQ`HAFEY%+ON zzW})G?>IKgGljNL^d1j7pT(3=k!y3~FFbYq=1Rm1r(C^(ZrFzR(@vp7_+^8N&Zhk+ zEFL@(F5pTpmgx*%$JeXF7;Cf!y{KbLby-j|d6+3edK||IwnIwqR_3KRp?u3WD{iK6 zb7>A)L|(du#Q3yU>^^RW%5c!J8q+xd<24<7N4lIG*P{NPWal^iH2VM6&%&6y$f8MUeBgk^c#r}C?8k`w`fALF91)glm&Jh| z;`Un4_*`j>p4EC998I4kR@Z9FJ^K-p$lY{zu_T_#;Hu3xnA}u0NPJ*M@&4hdndCB~ zqo9T+@b2tz`JJGAJ(qTzWZXM(2ynUkTbUe{`CQ-%rH{1}Yc_XMfX^Ml{UdSrGd7CQ zSSUjFHfKP4nY8Ip+aeQv<5!zM>W05m()^Fg@VOITPtKRuUdT=IZv4>*n1M^eB8M~5 z81>tv7hclt9Mzi~y!4(`yPl;oAeYImg$?FUZm6A!4gb|594t=|*LcipcL>UVB>wCk zU@qgIuA@0n81)ZlEK%CY!q#BbUxDAx*yr=kF2e>VeGbN4S4! z%dVc}d6|FQ@ejC3%}!=YVZ5Rs`q7?CC{BDYk`{UV+VGRy48|o)&~+&PzLN_z(bY^7X68UJp(E1 zD2@{8GUxHmtf^c7eT*BHF?pS?4wL26ce?g${YARhnzKhDP_>ay)cG7@=)fr~OJzxs z!yWAQqQE_LapNGRVWyt>UVpu)tU`w%&jyd^>%WRe-0`iyOy_)J_nAS|Tb-s~&1lM; zTW`((HJWHTcM>NiYF#xe?mU+qrPMf9XbP0;yrV^{q7rYjPh4pZkZyCcTM`K?flzavlYN(N{`fpwPsiJ5vH8iD^R>Yl1Y`dikI{eVx`{Q5 za5NP!2=Q(24%qNCS=lwLmBqBe*vAQp@F0qxw=4Mt4%b%hub=zps(~y@^i@3X15^C1 zlFhq{cyD^zF;I4^X=D()L?>mB`eBNnL!qCDU-fcyLgYHIM5lbCpxiLbvOHwiW48W6 zk)9<=n*cV_N4tec!QYEG8pHQ2>=y4X_!vl{#O7mpA8b%to*&<|F8@U7Rv4g=kSXjg zS|#97-iz^|T=G)jfU}%osabu?Pg*{0mze1Gnzc(NQ)f!>m(_>)JnPYP6TuuI@M`Q9 zQ;@p5lbwg*d;dBkTa|eI#qmciwRkp7yEhRcuQB-6S^SG-Ccv7?y*vKea z?hNXn2t2opE=ZRh*YmY7v)EQtK+KaGUks{ar1>xnslD+|b5vArHsP6dIY}%!K@fqC zJx1OBSC}Q>W+L=I0-h0=wq)7k%>Hq9@m#2Nk%h<;28Mixk@VhGMZWk6#2;DK#U)fX zzC>YIP4D$F@3e+XWbZU=Nl#4|WxyTv$w^&Nm>Oi - - - - - - - - Yuki Reflection - - - - -

    Select a language

    English 简体中文

    - - - diff --git a/docs/zh-cn/about/about.html b/docs/zh-cn/about/about.html deleted file mode 100644 index a18fa3f..0000000 --- a/docs/zh-cn/about/about.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - 关于此文档 | Yuki Reflection - - - - -

    关于此文档

    此文档由 VuePress在新窗口中打开 强力驱动。

    License

    The MIT License (MIT)在新窗口中打开

    MIT License
    -
    -Copyright (C) 2019-2023 HighCapable
    -
    -Permission is hereby granted, free of charge, to any person obtaining a copy
    -of this software and associated documentation files (the "Software"), to deal
    -in the Software without restriction, including without limitation the rights
    -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    -copies of the Software, and to permit persons to whom the Software is
    -furnished to do so, subject to the following conditions:
    -
    -The above copyright notice and this permission notice shall be included in all
    -copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    -SOFTWARE.
    -

    版权所有 © 2019-2023 HighCapable

    - - - diff --git a/docs/zh-cn/about/changelog.html b/docs/zh-cn/about/changelog.html deleted file mode 100644 index 65379dc..0000000 --- a/docs/zh-cn/about/changelog.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - 更新日志 | Yuki Reflection - - - - -

    更新日志

    这里记录了 YukiReflection 的版本更新历史。

    特别注意

    我们只会对最新的 API 版本进行维护,若你正在使用过时的 API 版本则代表你自愿放弃一切维护的可能性。

    1.0.2 | 2023.04.25  最新

    • 修复一个严重问题,Member 缓存未生效且持续存储最终引发 APP 内存溢出 (OOM),感谢 Art-Chen在新窗口中打开
    • 移除 Member 的直接缓存功能并作废 YukiReflection.Configs.isEnableMemberCache,保留 Class 的缓存功能
    • 对接查找功能到 Sequence,优化 Member 的查找速度与性能

    1.0.1 | 2023.04.16  过旧

    • 将依赖库的类型由 Java Library (jar) 修改为 Android Library (aar)
    • 移除了 Android type 中的错误 Class 对象声明

    1.0.0 | 2023.01.26  过旧

    • 首个版本提交至 Maven
    - - - diff --git a/docs/zh-cn/about/contacts.html b/docs/zh-cn/about/contacts.html deleted file mode 100644 index b37a828..0000000 --- a/docs/zh-cn/about/contacts.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - 联系我们 | Yuki Reflection - - - - -

    联系我们

    如在使用中有任何问题,或有任何建设性的建议,都可以联系我们。

    加入我们 点击加入 Telegram 群组在新窗口中打开点击加入 Telegram 群组 (开发者)在新窗口中打开

    酷安 找到我 @星夜不荟在新窗口中打开

    助力维护

    感谢您选择并使用 YukiReflection,如有代码相关的建议和请求,可在 GitHub 提交 Pull Request。

    - - - diff --git a/docs/zh-cn/about/future.html b/docs/zh-cn/about/future.html deleted file mode 100644 index e0750a8..0000000 --- a/docs/zh-cn/about/future.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - 展望未来 | Yuki Reflection - - - - -

    展望未来

    未来是美好的,也是不确定的,让我们共同期待 YukiReflection 在未来的发展空间。

    未来的计划

    这里收录了 YukiReflection 可能会在后期添加的功能。

    自动生成反射代码

    使用 stub 的方式创建一个 Kotlin 类,并声明其中的参数,以及其在各个版本中的不同状态。

    比如下面的这个 Java 类就是我们需要反射的目标类。

    示例如下

    package com.example.test;
    -
    -public class MyClass {
    -    
    -    private String myField = "test";
    -
    -    public MyClass() {
    -        // ...
    -    }
    -
    -    private String myMethod1(String var1, int var2) {
    -        // ...
    -    }
    -
    -    private void myMethod2() {
    -        // ...
    -    }
    -
    -    private void myMethod3(String var1) {
    -        // ...
    -    }
    -}
    -

    通过目前 API 的现有用法可以使用如下方式反射调用这个类。

    示例如下

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

    目前要实现的功能是可以使用反射功能直接定义为如下 Kotlin 类。

    示例如下

    package com.example.test
    -
    -@ReflectClass
    -class MyClass {
    -
    -    @ReflectField
    -    val myField: String = fieldValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod1(var1: String, var2: Int): String = methodReturnValueOf("none")
    -
    -    @ReflectMethod
    -    fun myMethod2() = MethodReturnType.Unit
    -
    -    @ReflectMethod
    -    fun myMethod3(var1: String) = MethodReturnType.Unit
    -}
    -

    然后我们就可以直接调用这个定义好的 Kotlin 类来实现反射功能,API 会根据注解自动生成反射代码。

    示例如下

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

    小提示

    以上功能可能会在实际推出后有所变化,最终以实际版本的功能为准。

    - - - diff --git a/docs/zh-cn/api/features.html b/docs/zh-cn/api/features.html deleted file mode 100644 index ac3c4bb..0000000 --- a/docs/zh-cn/api/features.html +++ /dev/null @@ -1,778 +0,0 @@ - - - - - - - - - 功能介绍 | Yuki Reflection - - - - -

    功能介绍

    这里包含了 YukiReflection 全部核心功能的用法示例。

    Class 扩展

    这里是 Class 对象自身相关的扩展功能。

    对象转换

    假设我们要得到一个不能直接调用的 Class,通常情况下,我们可以使用标准的反射 API 去查找这个 Class

    示例如下

    // 默认 ClassLoader 环境下的 Class
    -var instance = Class.forName("com.demo.Test")
    -// 指定 ClassLoader 环境下的 Class
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -var instance = customClassLoader?.loadClass("com.demo.Test")
    -

    这种写法大概不是很友好,此时 YukiReflection 就为你提供了一个可在任意地方使用的语法糖。

    以上写法换做 YukiReflection 可写作如下形式。

    示例如下

    // 直接得到这个 Class
    -var instance = "com.demo.Test".toClass()
    -// 自定义 Class 所在的 ClassLoader
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -var instance = "com.demo.Test".toClass(customClassLoader)
    -

    如果当前 Class 并不存在,使用上述方法会抛出异常,如果你不确定 Class 是否存在,可以参考下面的解决方案。

    示例如下

    // 直接得到这个 Class
    -// 得不到时结果会为 null 但不会抛出异常
    -var instance = "com.demo.Test".toClassOrNull()
    -// 自定义 Class 所在的 ClassLoader
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -// 得不到时结果会为 null 但不会抛出异常
    -var instance = "com.demo.Test".toClassOrNull(customClassLoader)
    -

    我们还可以通过映射来得到一个存在的 Class 对象。

    示例如下

    // 假设这个 Class 是能够被直接得到的
    -var instance = classOf<Test>()
    -// 我们同样可以自定义 Class 所在的 ClassLoader,这对于 stub 来说非常有效
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -var instance = classOf<Test>(customClassLoader)
    -

    小提示

    更多功能请参考 classOfString.toClassString.toClassOrNull 方法。

    存在判断

    假设我们要判断一个 Class 是否存在,通常情况下,我们可以使用标准的反射 API 去查找这个 Class 通过异常来判断是否存在。

    示例如下

    // 默认 ClassLoader 环境下的 Class
    -var isExist = try {
    -    Class.forName("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -// 指定 ClassLoader 环境下的 Class
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -var isExist = try {
    -    customClassLoader?.loadClass("com.demo.Test")
    -    true
    -} catch (_: Throwable) {
    -    false
    -}
    -

    这种写法大概不是很友好,此时 YukiReflection 就为你提供了一个可在任意地方使用的语法糖。

    以上写法换做 YukiReflection 可写作如下形式。

    示例如下

    // 判断这个 Class 是否存在
    -var isExist = "com.demo.Test".hasClass()
    -// 自定义 Class 所在的 ClassLoader
    -val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -var isExist = "com.demo.Test".hasClass(customClassLoader)
    -

    小提示

    更多功能请参考 String.hasClass 方法。

    模糊查找 Beta

    在 R8 等工具混淆后的当前 APP Dex 中的 Class 名称将会难以分辨,且不确定其正确位置,不能直接通过 对象转换 来得到。

    此时就有了 DexClassFinder,它的作用是通过需要查找的 Class 中的字节码特征来确定这个 Class 的实例。

    注意

    此功能仅适用于 Android 平台。

    目前 DexClassFinder 的功能尚在试验阶段,由于仅通过 Java 层实现查找功能,在当前 APP Class 过多时性能可能不能达到最佳水平,如果发生查找不到、定位有误的问题欢迎向我们反馈。

    由于是反射层面的 API,目前它只能通过类与成员的特征来定位指定的 Class,不能通过指定字节码中的字符串和方法内容特征来进行定位。

    查找 Class 的速度取决于当前设备的性能,目前主流的移动端处理器在 10~15w 数量的 Class 中条件不算复杂的情况下大概在 3~10s 区间,条件稍微复杂的情况下最快速度能达到 25s 以内,匹配到的同类型 Class 越多速度越慢。

    特别注意

    YukiHookAPI 发布 2.x.x 版本后,此功能将被标记为作废,且将会直接从 YukiReflection 中移除。

    我们欢迎各位开发者开始使用 DexKit在新窗口中打开,它是一个使用 C++ 实现的 Dex 高性能运行时解析库,在性能方面比 Java 层更加高效与优秀,目前尚在开发阶段,欢迎提出宝贵建议。

    开始使用

    下面是一个简单的用法示例。

    假设下面这个 Class 是我们想要得到的,其中的名称经过了混淆,在每个版本可能都不一样。

    示例如下

    package com.demo;
    -
    -public class a extends Activity implements Serializable {
    -
    -    public a(String var1) {
    -        // ...
    -    }
    -
    -    private String a;
    -
    -    private String b;
    -
    -    private boolean a;
    -
    -    protected void onCreate(Bundle var1) {
    -        // ...
    -    }
    -
    -    private static void a(String var1) {
    -        // ...
    -    }
    -
    -    private String a(boolean var1, String var2) {
    -        // ...
    -    }
    -
    -    private void a() {
    -        // ...
    -    }
    -
    -    public void a(boolean var1, a var2, b var3, String var4) {
    -        // ...
    -    }
    -}
    -

    此时,我们想得到这个 Class,可以直接使用 ClassLoader.searchClass 方法。

    下方演示的条件中每一个都是可选的,条件越复杂定位越精确,同时性能也会越差。

    示例如下

    searchClass {
    -    // 从指定的包名范围开始查找,实际使用时,你可以同时指定多个包名范围
    -    from("com.demo")
    -    // 指定当前 Class 的 getSimpleName 的结果,你可以直接对这个字符串进行逻辑判断
    -    // 这里我们不确定它的名称是不是 a,可以只判断字符串长度
    -    simpleName { it.length == 1 }
    -    // 指定继承的父类对象,如果是存在的 stub,可以直接用泛型表示
    -    extends<Activity>()
    -    // 指定继承的父类对象,可以直接写为完整类名,你还可以同时指定多个
    -    extends("android.app.Activity")
    -    // 指定实现的接口,如果是存在的 stub,可以直接用泛型表示
    -    implements<Serializable>()
    -    // 指定实现的接口,可以直接写为完整类名,你还可以同时指定多个
    -    implements("java.io.Serializable")
    -    // 指定构造方法的类型与样式,以及在当前类中存在的个数 count
    -    constructor { param(StringClass) }.count(num = 1)
    -    // 指定变量的类型与样式,以及在当前类中存在的个数 count
    -    field { type = StringClass }.count(num = 2)
    -    // 指定变量的类型与样式,以及在当前类中存在的个数 count
    -    field { type = BooleanType }.count(num = 1)
    -    // 直接指定所有变量在当前类中存在的个数 count
    -    field().count(num = 3)
    -    // 如果你认为变量的个数是不确定的,还可以使用如下自定义条件
    -    field().count(1..3)
    -    field().count { it >= 3 }
    -    // 指定方法的类型与样式,以及在当前类中存在的个数 count
    -    method {
    -        name = "onCreate"
    -        param(BundleClass)
    -    }.count(num = 1)
    -    // 指定方法的类型与样式,同时指定修饰符,以及在当前类中存在的个数 count
    -    method {
    -        modifiers { isStatic && isPrivate }
    -        param(StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // 指定方法的类型与样式,同时指定修饰符,以及在当前类中存在的个数 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, StringClass)
    -        returnType = StringClass
    -    }.count(num = 1)
    -    // 指定方法的类型与样式,同时指定修饰符,以及在当前类中存在的个数 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        emptyParam()
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // 指定方法的类型与样式,同时指定修饰符和模糊类型 VagueType,以及在当前类中存在的个数 count
    -    method {
    -        modifiers { isPrivate && isStatic.not() }
    -        param(BooleanType, VagueType, VagueType, StringClass)
    -        returnType = UnitType
    -    }.count(num = 1)
    -    // 直接指定所有方法在当前类中存在的个数 count
    -    method().count(num = 5)
    -    // 如果你认为方法的个数是不确定的,还可以使用如下自定义条件
    -    method().count(1..5)
    -    method().count { it >= 5 }
    -    // 直接指定所有成员 (Member) 在当前类中存在的个数 count
    -    // 成员包括:Field (变量)、Method (方法)、Constructor (构造方法)
    -    member().count(num = 9)
    -    // 所有成员中一定存在一个 static 修饰符,可以这样加入此条件
    -    member {
    -        modifiers { isStatic }
    -    }
    -}.get() // 得到这个 Class 本身的实例,找不到会返回 null
    -

    小提示

    上述用法中对于 FieldMethodConstructor 的条件用法与 Member 扩展 中的相关用法是一致的,仅有小部分区别。

    更多功能请参考 MemberRulesFieldRulesMethodRulesConstructorRules

    异步查找

    默认情况下 DexClassFinder 会使用同步方式查找 Class,会阻塞当前线程直到找到或找不到发生异常为止,若查找消耗的时间过长,可能会导致当前 APP 发生 ANR 问题。

    针对上述问题,我们可以启用异步,只需要加入参数 async = true,这将不需要你再次启动一个线程,API 已帮你处理好相关问题。

    注意

    若要使用此功能,你需要在方法参数首位传入当前 APP 的 Context

    对于异步情况下你需要使用 wait 方法来得到结果,get 方法将不再起作用。

    示例如下

    val context: Context // 假设这就是当前 APP 的 Context
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class1 ->
    -    // 得到异步结果
    -}
    -searchClass(context, async = true) {
    -    // ...
    -}.wait { class2 ->
    -    // 得到异步结果
    -}
    -

    这样我们的查找过程就是异步运行了,它将不会阻塞主线程,每个查找都将在单独的线程同时进行,可达到并行任务的效果。

    本地缓存

    由于每次重新打开当前 APP 都会重新进行查找,在当前 APP 版本不变的情况下这是一种重复性能浪费。

    此时我们可以通过指定 name 参数来对当前 APP 版本的查找结果进行本地缓存,下一次将直接从本地缓存中读取查找到的类名。

    本地缓存使用的是 SharedPreferences,它将被保存到当前 APP 的数据目录中,在当前 APP 版本更新后会重新进行缓存。

    启用本地缓存后,将同时设置 async = true,你可以不需要再手动进行设置。

    注意

    若要使用此功能,你需要在方法参数首位传入当前 APP 的 Context

    示例如下

    val context: Context // 假设这就是当前 APP 的 Context
    -searchClass(context, name = "com.demo.class1") {
    -    // ...
    -}.wait { class1 ->
    -    // 得到异步结果
    -}
    -searchClass(context, name = "com.demo.class2") {
    -    // ...
    -}.wait { class2 ->
    -    // 得到异步结果
    -}
    -

    如果你想手动清除本地缓存,可以使用如下方法清除当前 APP 版本的缓存。

    示例如下

    val context: Context // 假设这就是当前 APP 的 Context
    -DexClassFinder.clearCache(context)
    -

    你还可以清除指定版本的 APP 缓存。

    示例如下

    val context: Context // 假设这就是当前 APP 的 Context
    -DexClassFinder.clearCache(context, versionName = "1.0", versionCode = 1)
    -

    多重查找

    如果你需要使用固定的条件同时查找一组 Class,那么你只需要使用 allwaitAll 方法来得到结果。

    // 同步查找,使用 all 得到条件全部查找到的结果
    -searchClass {
    -    // ...
    -}.all().forEach { clazz ->
    -    // 得到每个结果
    -}
    -// 同步查找,使用 all { ... } 遍历每个结果
    -searchClass {
    -    // ...
    -}.all { clazz ->
    -    // 得到每个结果
    -}
    -// 异步查找,使用 waitAll 得到条件全部查找到的结果
    -val context: Context // 假设这就是当前 APP 的 Context
    -searchClass(context, async = true) {
    -    // ...
    -}.waitAll { classes ->
    -    classes.forEach {
    -        // 得到每个结果
    -    }
    -}
    -

    小提示

    更多功能请参考 ClassLoader.searchClass 方法。

    Member 扩展

    这里是 Class 字节码成员变量 FieldMethodConstructor 相关的扩展功能。

    小提示

    MemberFieldMethodConstructor 的接口描述对象,它在 Java 反射中为 Class 中字节码成员的总称。

    假设有一个这样的 Class

    示例如下

    package com.demo;
    -
    -public class BaseTest {
    -
    -    public BaseTest() {
    -        // ...
    -    }
    -
    -    public BaseTest(boolean isInit) {
    -        // ...
    -    }
    -
    -    private void doBaseTask(String taskName) {
    -        // ...
    -    }
    -}
    -
    package com.demo;
    -
    -public class Test extends BaseTest {
    -
    -    public Test() {
    -        // ...
    -    }
    -
    -    public Test(boolean isInit) {
    -        // ...
    -    }
    -
    -    private static TAG = "Test";
    -
    -    private BaseTest baseInstance;
    -
    -    private String a;
    -
    -    private boolean a;
    -
    -    private boolean isTaskRunning = false;
    -
    -    private static void init() {
    -        // ...
    -    }
    -
    -    private void doTask(String taskName) {
    -        // ...
    -    }
    -
    -    private void release(String taskName, Function<boolean, String> task, boolean isFinish) {
    -        // ...
    -    }
    -
    -    private void stop() {
    -        // ...
    -    }
    -
    -    private String getName() {
    -        // ...
    -    }
    -
    -    private void b() {
    -        // ...
    -    }
    -
    -    private void b(String a) {
    -        // ...
    -    }
    -}
    -

    查找与反射调用

    假设我们要得到 Test(以下统称“当前 Class”)的 doTask 方法并执行,通常情况下,我们可以使用标准的反射 API 去查找这个方法。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用反射 API 调用并执行
    -Test::class.java
    -    .getDeclaredMethod("doTask", String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(instance, "task_name")
    -

    这种写法大概不是很友好,此时 YukiReflection 就为你提供了一个可在任意地方使用的语法糖。

    以上写法换做 YukiReflection 可写作如下形式。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "doTask"
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    小提示

    更多功能请参考 MethodFinder

    同样地,我们需要得到 isTaskRunning 变量也可以写作如下形式。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.field {
    -    name = "isTaskRunning"
    -    type = BooleanType
    -}.get(instance).any() // any 为 Field 的任意类型实例化对象
    -

    小提示

    更多功能请参考 FieldFinder

    也许你还想得到当前 Class 的构造方法,同样可以实现。

    示例如下

    Test::class.java.constructor {
    -    param(BooleanType)
    -}.get().call(true) // 可创建一个新的实例
    -

    若想得到的是 Class 的无参构造方法,可写作如下形式。

    示例如下

    Test::class.java.constructor().get().call() // 可创建一个新的实例
    -

    小提示

    更多功能请参考 ConstructorFinder

    可选的查找条件

    假设我们要得到 Class 中的 getName 方法,可以使用如下实现。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -    returnType = StringClass
    -}.get(instance).string() // 得到方法的结果
    -

    通过观察发现,这个 Class 中只有一个名为 getName 的方法,那我们可不可以再简单一点呢?

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "getName"
    -    emptyParam()
    -}.get(instance).string() // 得到方法的结果
    -

    是的,对于确切不会变化的方法,你可以精简查找条件。

    在只使用 getwait 方法得到结果时 YukiReflection 会默认按照字节码顺序匹配第一个查找到的结果

    问题又来了,这个 Class 中有一个 release 方法,但是它的方法参数很长,而且部分类型可能无法直接得到。

    通常情况下我们会使用 param(...) 来查找这个方法,但是有没有更简单的方法呢。

    此时,在确定方法唯一性后,你可以使用 paramCount 来查找到这个方法。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "release"
    -    // 此时我们不必确定方法参数具体类型,写个数就好
    -    paramCount = 3
    -}.get(instance) // 得到这个方法
    -

    上述示例虽然能够匹配成功,但是不精确,此时你还可以使用 VagueType 来填充你不想填写的方法参数类型。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "release"
    -    // 使用 VagueType 来填充不想填写的类型,同时保证其它类型能够匹配
    -    param(StringClass, VagueType, BooleanType)
    -}.get(instance) // 得到这个方法
    -

    如果你并不确定每一个参数的类型,你可以通过 param { ... } 方法来创建一个条件方法体。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "release"
    -    // 得到 it (Class) 方法参数类型数组实例来仅判断已知的类型和它的位置
    -    param { it[0] == StringClass && it[2] == BooleanType }
    -}.get(instance) // 得到这个方法
    -

    小提示

    使用 param { ... } 创建一个条件方法体,其中的变量 it 即当前方法参数的 Class 类型数组实例,此时你就可以自由使用 Class 中的所有对象及其方法。

    方法体末尾条件需要返回一个 Boolean,即最终的条件判断结果。

    更多功能请参考 FieldFinder.typeMethodFinder.paramMethodFinder.returnTypeConstructorFinder.param 方法。

    在父类查找

    你会注意到 Test 继承于 BaseTest,现在我们想得到 BaseTestdoBaseTask 方法,在不知道父类名称的情况下,要怎么做呢?

    参照上面的查找条件,我们只需要在查找条件中加入一个 superClass 即可实现这个功能。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // 只需要添加这个条件
    -    superClass()
    -}.get(instance).call("task_name")
    -

    这个时候我们就可以在父类中取到这个方法了。

    superClass 有一个参数为 isOnlySuperClass,设置为 true 后,可以跳过当前 Class 仅查找当前 Class 的父类。

    由于我们现在已知 doBaseTask 方法只存在于父类,可以加上这个条件节省查找时间。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "doBaseTask"
    -    param(StringClass)
    -    // 加入一个查找条件
    -    superClass(isOnlySuperClass = true)
    -}.get(instance).call("task_name")
    -

    这个时候我们同样可以得到父类中的这个方法。

    superClass 一旦设置就会自动循环向后查找全部继承的父类中是否有这个方法,直到查找到目标没有父类(继承关系为 java.lang.Object)为止。

    特别注意

    当前查找的 Method 除非指定 superClass 条件,否则只能查找到当前 ClassMethod,这是 Java 反射 API 的默认行为。

    模糊查找

    如果我们想查找一个方法名称,但是又不确定它在每个版本中是否发生变化,此时我们就可以使用模糊查找功能。

    假设我们要得到 Class 中的 doTask 方法,可以使用如下实现。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name {
    -        // 设置名称不区分大小写
    -        it.equals("dotask", isIgnoreCase = true)
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    已知当前 Class 中仅有一个 doTask 方法,我们还可以判断方法名称仅包含其中指定的字符。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name {
    -        // 仅包含 oTas
    -        it.contains("oTas")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    我们还可以根据首尾字符串进行判断。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name {
    -        // 开头包含 do,结尾包含 Task
    -        it.startsWith("do") && it.endsWith("Task")
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    通过观察发现这个方法名称中只包含字母,我们还可以再增加一个精确的查找条件。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name {
    -        // 开头包含 do,结尾包含 Task,仅包含字母
    -        it.startsWith("do") && it.endsWith("Task") && it.isOnlyLetters()
    -    }
    -    param(StringClass)
    -}.get(instance).call("task_name")
    -

    小提示

    使用 name { ... } 创建一个条件方法体,其中的变量 it 即当前名称的字符串,此时你就可以在 NameRules 的扩展方法中自由使用其中的功能。

    方法体末尾条件需要返回一个 Boolean,即最终的条件判断结果。

    更多功能请参考 FieldFinder.nameMethodFinder.name 方法以及 NameRules

    多重查找

    有些时候,我们可能需要查找一个 Class 中具有相同特征的一组方法、构造方法、变量,此时,我们就可以利用相对条件匹配来完成。

    在查找条件结果的基础上,我们只需要把 get 换为 all 即可得到匹配条件的全部字节码。

    假设这次我们要得到 Class 中方法参数个数范围在 1..3 的全部方法,可以使用如下实现。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    paramCount(1..3)
    -}.all(instance).forEach { instance ->
    -    // 调用执行每个方法
    -    instance.call(...)
    -}
    -

    上述示例可完美匹配到如下 3 个方法。

    private void doTask(String taskName)

    private void release(String taskName, Function<boolean, String> task, boolean isFinish)

    private void b(String a)

    如果你想更加自由地定义参数个数范围的条件,可以使用如下实现。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    paramCount { it < 3 }
    -}.all(instance).forEach { instance ->
    -    // 调用执行每个方法
    -    instance.call(...)
    -}
    -

    上述示例可完美匹配到如下 6 个方法。

    private static void init()

    private void doTask(String taskName)

    private void stop(String a)

    private void getName(String a)

    private void b()

    private void b(String a)

    通过观察 Class 中有两个名称为 b 的方法,可以使用如下实现。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "b"
    -}.all(instance).forEach { instance ->
    -    // 调用执行每个方法
    -    instance.call(...)
    -}
    -

    上述示例可完美匹配到如下 2 个方法。

    private void b()

    private void b(String a)

    小提示

    使用 paramCount { ... } 创建一个条件方法体,其中的变量 it 即当前参数个数的整数,此时你就可以在 CountRules 的扩展方法中自由使用其中的功能。

    方法体末尾条件需要返回一个 Boolean,即最终的条件判断结果。

    更多功能请参考 MethodFinder.paramCountConstructorFinder.paramCount 方法以及 CountRules

    静态字节码

    有些方法和变量在 Class 中是静态的实现,这个时候,我们不需要传入实例就可以调用它们。

    假设我们这次要得到静态变量 TAG 的内容。

    示例如下

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -}.get().string() // Field 的类型是字符串,可直接进行 cast
    -

    假设 Class 中存在同名的非静态 TAG 变量,这个时候怎么办呢?

    加入一个筛选条件即可。

    示例如下

    Test::class.java.field {
    -    name = "TAG"
    -    type = StringClass
    -    // 标识查找的这个变量需要是静态
    -    modifiers { isStatic }
    -}.get().string() // Field 的类型是字符串,可直接进行 cast
    -

    我们还可以调用名为 init 的静态方法。

    示例如下

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -}.get().call()
    -

    同样地,你可以标识它是一个静态。

    示例如下

    Test::class.java.method {
    -    name = "init"
    -    emptyParam()
    -    // 标识查找的这个方法需要是静态
    -    modifiers { isStatic }
    -}.get().call()
    -

    小提示

    使用 modifiers { ... } 创建一个条件方法体,此时你就可以在 ModifierRules 中自由使用其中的功能。

    方法体末尾条件需要返回一个 Boolean,即最终的条件判断结果。

    更多功能请参考 FieldFinder.modifiersMethodFinder.modifiersConstructorFinder.modifiers 方法以及 ModifierRules

    混淆的字节码

    你可能已经注意到了,这里给出的示例 Class 中有两个混淆的变量名称,它们都是 a,这个时候我们要怎么得到它们呢?

    有两种方案。

    第一种方案,确定变量的名称和类型。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.field {
    -    name = "a"
    -    type = BooleanType
    -}.get(instance).any() // 得到名称为 a 类型为 Boolean 的变量
    -

    第二种方案,确定变量的类型所在的位置。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.field {
    -    type(BooleanType).index().first()
    -}.get(instance).any() // 得到第一个类型为 Boolean 的变量
    -

    以上两种情况均可得到对应的变量 private boolean a

    同样地,这个 Class 中也有两个混淆的方法名称,它们都是 b

    你也可以有两种方案来得到它们。

    第一种方案,确定方法的名称和方法参数。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "b"
    -    param(StringClass)
    -}.get(instance).call("test_string") // 得到名称为 b 方法参数为 [String] 的方法
    -

    第二种方案,确定方法的参数所在的位置。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    param(StringClass).index().first()
    -}.get(instance).call("test_string") // 得到第一个方法参数为 [String] 的方法
    -

    由于观察到这个方法在 Class 的最后一个,那我们还有一个备选方案。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    order().index().last()
    -}.get(instance).call("test_string") // 得到当前 Class 的最后一个方法
    -

    注意

    请尽量避免使用 order 来筛选字节码的下标,它们可能是不确定的,除非你确定它在这个 Class 中的位置一定不会变。

    直接调用

    上面介绍的调用字节码的方法都需要使用 get(instance) 才能调用对应的方法,有没有简单一点的办法呢?

    此时,你可以在任意实例上使用 current 方法来创建一个调用空间。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 假设这个 Class 是不能被直接得到的
    -instance.current {
    -    // 执行 doTask 方法
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -    // 执行 stop 方法
    -    method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -    // 得到 name
    -    val name = method { name = "getName" }.string()
    -}
    -

    我们还可以用 superClass 调用当前 Class 父类的方法。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 假设这个 Class 是不能被直接得到的
    -instance.current {
    -    // 执行父类的 doBaseTask 方法
    -    superClass().method {
    -        name = "doBaseTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    如果你不喜欢使用一个大括号的调用域来创建当前实例的命名空间,你可以直接使用 current() 方法。

    示例如下

    // 假设这就是这个 Class 的实例,这个 Class 是不能被直接得到的
    -val instance = Test()
    -// 执行 doTask 方法
    -instance
    -    .current()
    -    .method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -// 执行 stop 方法
    -instance
    -    .current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// 得到 name
    -val name = instance.current().method { name = "getName" }.string()
    -

    同样地,它们之间可以连续调用,但不允许内联调用

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 假设这个 Class 是不能被直接得到的
    -instance.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}.current()
    -    .method {
    -        name = "stop"
    -        emptyParam()
    -    }.call()
    -// ❗注意,因为 current() 返回的是 CurrentClass 自身对象,所以不能像下面这样调用
    -instance.current().current()
    -

    针对 Field 实例,还有一个便捷的方法,可以直接获取 Field 所在实例的对象。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 假设这个 Class 是不能被直接得到的
    -instance.current {
    -    // <方案1>
    -    field {
    -        name = "baseInstance"
    -    }.current {
    -        method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }.call("task_name")
    -    }
    -    // <方案2>
    -    field {
    -        name = "baseInstance"
    -    }.current()
    -        ?.method {
    -            name = "doBaseTask"
    -            param(StringClass)
    -        }?.call("task_name")
    -}
    -

    注意

    上述 current 方法相当于帮你调用了 CurrentClass 中的 field { ... }.any()?.current() 方法。

    若不存在 CurrentClass 调用域,你需要使用 field { ... }.get(instance).current() 来进行调用。

    问题又来了,我想使用反射的方式创建如下的实例并调用其中的方法,该怎么做呢?

    示例如下

    Test(true).doTask("task_name")
    -

    通常情况下,我们可以使用标准的反射 API 来调用。

    示例如下

    "com.demo.Test".toClass()
    -    .getDeclaredConstructor(Boolean::class.java)
    -    .apply { isAccessible = true }
    -    .newInstance(true)
    -    .apply {
    -        javaClass
    -            .getDeclaredMethod("doTask", String::class.java)
    -            .apply { isAccessible = true }
    -            .invoke(this, "task_name")
    -    }
    -

    但是感觉这种做法好麻烦,有没有更简洁的调用方法呢?

    这个时候,我们还可以借助 buildOf 方法来创建一个实例。

    示例如下

    "com.demo.Test".toClass().buildOf(true) { param(BooleanType) }?.current {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.call("task_name")
    -}
    -

    若你希望 buildOf 方法返回当前实例的类型,你可以在其中加入类型泛型声明,而无需使用 ascast 目标类型。

    这种情况多用于实例本身的构造方法是私有的,但是里面的方法是公有的,这样我们只需要对其构造方法进行反射创建即可。

    示例如下

    // 假设这个 Class 是能够直接被得到的
    -val test = Test::class.java.buildOf<Test>(true) { param(BooleanType) }
    -test.doTask("task_name")
    -

    小提示

    更多功能请参考 CurrentClass 以及 Class.buildOf 方法。

    再次查找

    假设有三个不同版本的 Class,它们都是这个 APP 不同版本相同的 Class

    这里面同样都有一个方法 doTask,假设它们的功能是一样的。

    版本 A 示例如下

    public class Test {
    -
    -    public void doTask() {
    -        // ...
    -    }
    -}
    -

    版本 B 示例如下

    public class Test {
    -
    -    public void doTask(String taskName) {
    -        // ...
    -    }
    -}
    -

    版本 C 示例如下

    public class Test {
    -
    -    public void doTask(String taskName, int type) {
    -        // ...
    -    }
    -}
    -

    我们需要在不同的版本中得到这个相同功能的 doTask 方法,要怎么做呢?

    此时,你可以使用 RemedyPlan 完成你的需求。

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        param(StringClass)
    -    }.onFind {
    -        // 可在这里实现找到的逻辑
    -    }
    -    method {
    -        name = "doTask"
    -        param(StringClass, IntType)
    -    }.onFind {
    -        // 可在这里实现找到的逻辑
    -    }
    -}.wait(instance) {
    -    // 得到方法的结果
    -}
    -

    特别注意

    使用了 RemedyPlan 的方法查找结果不能再使用 get 的方式得到方法实例,应当使用 wait 方法。

    另外,你还可以在使用 多重查找 的情况下继续使用 RemedyPlan

    示例如下

    // 假设这就是这个 Class 的实例
    -val instance = Test()
    -// 使用 YukiReflection 调用并执行
    -Test::class.java.method {
    -    name = "doTask"
    -    emptyParam()
    -}.remedys {
    -    method {
    -        name = "doTask"
    -        paramCount(0..1)
    -    }.onFind {
    -        // 可在这里实现找到的逻辑
    -    }
    -    method {
    -        name = "doTask"
    -        paramCount(1..2)
    -    }.onFind {
    -        // 可在这里实现找到的逻辑
    -    }
    -}.waitAll(instance) {
    -    // 得到方法的结果
    -}
    -

    相对匹配

    假设当前 APP 中不同版本中存在功能相同的 Class 但仅有 Class 的名称不一样。

    版本 A 示例如下

    public class ATest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    版本 B 示例如下

    public class BTest {
    -
    -    public static void doTask() {
    -        // ...
    -    }
    -}
    -

    这个时候我们想在每个版本都调用这个 Class 里的 doTask 方法该怎么做呢?

    通常做法是判断 Class 是否存在。

    示例如下

    // 首先查找到这个 Class
    -val currentClass = 
    -    if("com.demo.ATest".hasClass()) "com.demo.ATest".toClass() else "com.demo.BTest".toClass()
    -// 然后再查找这个方法并调用
    -currentClass.method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    感觉这种方案非常的不优雅且繁琐,那么此时 YukiReflection 就为你提供了一个非常方便的 VariousClass 专门来解决这个问题。

    现在,你可以直接使用以下方式获取到这个 Class

    示例如下

    VariousClass("com.demo.ATest", "com.demo.BTest").get().method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    若当前 Class 在指定的 ClassLoader 中存在,你可以在 get 中填入你的 ClassLoader

    示例如下

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").get(customClassLoader).method {
    -    name = "doTask"
    -    emptyParam()
    -}.get().call()
    -

    若你不确定所有的 Class 一定会被匹配到,你可以使用 getOrNull 方法。

    示例如下

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -VariousClass("com.demo.ATest", "com.demo.BTest").getOrNull(customClassLoader)?.method {
    -    name = "doTask"
    -    emptyParam()
    -}?.get()?.call()
    -

    小提示

    更多功能请参考 VariousClass

    调用泛型

    在反射过程中,我们可能会遇到泛型问题,在泛型的反射处理上,YukiReflection 同样提供了一个可在任意地方使用的语法糖。

    例如我们有如下的泛型类。

    示例如下

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -

    当我们想在当前 Class 中获得泛型 TRClass 实例,只需要如下实现。

    示例如下

    class TestGeneric<T, R> (t: T, r: R) {
    -
    -    fun foo() {
    -        // 获得当前实例的操作对象
    -        // 获得 T 的 Class 实例,在参数第 0 位,默认值可以不写
    -        val tClass = current().generic()?.argument()
    -        // 获得 R 的 Class 实例,在参数第 1 位
    -        val rClass = current().generic()?.argument(index = 1)
    -        // 你还可以使用如下写法
    -        current().generic {
    -             // 获得 T 的 Class 实例,在参数第 0 位,默认值可以不写
    -            val tClass = argument()
    -            // 获得 R 的 Class 实例,在参数第 1 位
    -            val rClass = argument(index = 1)
    -        }
    -    }
    -}
    -

    当我们想在外部调用这个 Class 时,就可以有如下实现。

    示例如下

    // 假设这个就是 T 的 Class
    -class TI {
    -
    -    fun foo() {
    -        // ...
    -    }
    -}
    -// 假设这个就是 T 的实例
    -val tInstance: TI? = ...
    -// 获得 T 的 Class 实例,在参数第 0 位,默认值可以不写,并获得其中的方法 foo 并调用
    -TestGeneric::class.java.generic()?.argument()?.method {
    -    name = "foo"
    -    emptyParam()
    -}?.get(tInstance)?.invoke<TI>()
    -

    小提示

    更多功能请参考 CurrentClass.genericClass.generic 方法以及 GenericClass

    注意误区

    这里列举了使用时可能会遇到的误区部分,可供参考。

    限制性查找条件

    特别注意

    在查找条件中,除了 order 你只能使用一次 index 功能。

    示例如下

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    // ❗错误的使用方法,请仅保留一个 index 方法
    -    returnType(StringClass).index(num = 1)
    -}
    -

    以下查找条件的使用是没有任何问题的。

    示例如下

    method {
    -    name = "test"
    -    param(BooleanType).index(num = 2)
    -    order().index(num = 1)
    -}
    -

    必要的查找条件

    特别注意

    在普通方法查找条件中,即使是无参的方法也需要设置查找条件

    假设我们有如下的 Class

    示例如下

    public class TestFoo {
    -
    -    public void foo(String string) {
    -        // ...
    -    }
    -
    -    public void foo() {
    -        // ...
    -    }
    -}
    -

    我们要得到其中的 public void foo() 方法,可以写作如下形式。

    示例如下

    TestFoo::class.java.method {
    -    name = "foo"
    -}
    -

    但是,上面的例子是错误的

    你会发现这个 Class 中有两个 foo 方法,其中一个带有方法参数。

    由于上述例子没有设置 param 的查找条件,得到的结果将会是匹配名称且匹配字节码顺序的第一个方法 public void foo(String string),而不是我们需要的最后一个方法。

    这是一个经常会出现的错误没有方法参数就会丢失方法参数查找条件的使用问题。

    正确的使用方法如下。

    示例如下

    TestFoo::class.java.method {
    -    name = "foo"
    -    // ✅ 正确的使用方法,添加详细的筛选条件
    -    emptyParam()
    -}
    -

    至此,上述的示例将可以完美地匹配到 public void foo() 方法。

    可简写查找条件

    在构造方法查找条件中,无参的构造方法可以不需要填写查找条件

    假设我们有如下的 Class

    示例如下

    public class TestFoo {
    -
    -    public TestFoo() {
    -        // ...
    -    }
    -}
    -

    我们要得到其中的 public TestFoo() 构造方法,可以写作如下形式。

    示例如下

    TestFoo::class.java.constructor { emptyParam() }
    -

    上面的例子可以成功获取到 public TestFoo() 构造方法,但是感觉有一些繁琐。

    与普通方法不同,由于构造方法不需要考虑 name 名称,当构造方法没有参数的时候,我们可以省略 emptyParam 参数。

    示例如下

    TestFoo::class.java.constructor()
    -

    字节码类型

    特别注意

    在字节码调用结果中,cast 方法只能指定字节码对应的类型。

    例如我们想得到一个 Boolean 类型的变量,把他转换为 String

    以下是错误的使用方法。

    示例如下

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().string() // ❗错误的使用方法,必须 cast 为字节码目标类型
    -

    以下是正确的使用方法。

    示例如下

    field {
    -    name = "test"
    -    type = BooleanType
    -}.get().boolean().toString() // ✅ 正确的使用方法,得到类型后再进行转换
    -

    常用类型扩展

    在查找方法、变量的时候我们通常需要指定所查找的类型。

    示例如下

    field {
    -    name = "test"
    -    type = Boolean::class.javaPrimitiveType
    -}
    -

    Kotlin 中表达出 Boolean::class.javaPrimitiveType 这个类型的写法很长,感觉并不方便。

    因此,YukiReflection 为开发者封装了常见的类型调用,其中包含了 Android 的相关类型和 Java 的常见类型与原始类型关键字

    这个时候上面的类型就可以写作如下形式了。

    示例如下

    field {
    -    name = "test"
    -    type = BooleanType
    -}
    -

    在 Java 常见类型中的原始类型 (或基本类型) 关键字都已被封装为 类型 + Type 的方式,例如 IntTypeFloatType (它们的字节码类型为 intfloat)。

    相应地,数组类型也有方便的使用方法,假设我们要获得 String[] 类型的数组。

    需要写做 java.lang.reflect.Array.newInstance(String::class.java, 0).javaClass 才能得到这个类型。

    感觉是不是很麻烦,这个时候我们可以使用方法 ArrayClass(StringClass) 来得到这个类型。

    同时由于 String 是常见类型,所以还可以直接使用 StringArrayClass 来得到这个类型。

    一些常见需求中查找的方法,都有其对应的封装类型以供使用,格式为 类型 + Class

    以下是 Java 中一些特例类型在 YukiReflection 中的封装名称。

    • voidUnitType

    • java.lang.VoidUnitClass

    • java.lang.ObjectAnyClass

    • java.lang.IntegerIntClass

    • java.lang.CharacterCharClass

    注意

    类型 + Type 封装类型会且仅会表示为 Java 原始类型关键字,由于 Kotlin 中不存在原始类型这个概念,所以它们都会被定义为 KClass

    Java 中共有 9 个原始类型关键字,其中 8 个为原始类型,分别为 booleancharbyteshortintfloatlongdouble,其中 void 类型是一个特例。

    同时它们都有 Java 自身对应的封装类型,例如 java.lang.Booleanjava.lang.Integer,这些类型是不相等的,请注意区分。

    同样地,数组也有对应的封装类型,它们也需要与 Java 原始类型关键字 进行区分。

    例如 byte[] 的封装类型为 ByteArrayTypeArrayClass(ByteType),而 Byte[] 的封装类型为 ByteArrayClassArrayClass(ByteClass),这些类型也是不相等的

    同时,欢迎你能贡献更多的常用类型。

    - - - diff --git a/docs/zh-cn/api/home.html b/docs/zh-cn/api/home.html deleted file mode 100644 index 7874223..0000000 --- a/docs/zh-cn/api/home.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - 文档介绍 | Yuki Reflection - - - - -

    文档介绍

    这里的文档将同步最新 API 版本的相关用法,请保持 YukiReflection 为最新版本以使用最新版本的功能。

    功能描述说明

    功能描述主要介绍当前 API 的相关用法和用途。

    功能示例说明

    功能示例主要展示了当前 API 的基本用法示例,可供参考。

    变更记录说明

    首个版本的功能将标记为 v<version> 添加

    后期新增加的功能将标记为 v<version> 新增

    后期修改的功能将被追加为 v<version> 修改

    后期被作废的功能将标记为 v<version> 作废 并会标注删除线;

    后期被删除的功能将标记为 v<version> 移除 并会标注删除线。

    相关符号说明

    • kt  Kotlin Static File

    • annotation  注解

    • interface  接口

    • object  类 (单例)

    • class  类

    • field  变量或 getset 方法或只读的 get 方法

    • method  方法

    • enum  Enum 常量

    • ext-field  扩展的变量 (全局)

    • ext-method  扩展的方法 (全局)

    • i-ext-field  扩展的变量 (调用域限制)

    • i-ext-method  扩展的方法 (调用域限制)

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html deleted file mode 100644 index b533be4..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/YukiReflection.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - YukiReflection - object | Yuki Reflection - - - - -

    YukiReflection - object

    object YukiReflection
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是 YukiReflection 的装载调用类。

    API_VERSION_NAME - field

    const val API_VERSION_NAME: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    获取当前 YukiReflection 的版本。

    API_VERSION_CODE - field

    const val API_VERSION_CODE: Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    获取当前 YukiReflection 的版本号。

    Configs - object

    object Configs
    -

    变更记录

    v1.0.0 添加

    功能描述

    对 API 相关功能的配置类。

    debugTag - field

    var debugTag: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个调试日志的全局标识。

    默认文案为 YukiReflection

    你可以修改为你自己的文案。

    isDebug - field

    var isDebug: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否启用 Debug 模式。

    默认不启用,启用后将交由日志输出管理器打印详细日志 (例如反射查找功能的耗时) 到控制台。

    请过滤 debugTag 即可找到每条日志。

    isAllowPrintingLogs - field

    var isAllowPrintingLogs: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否启用调试日志的输出功能。

    注意

    关闭后将会停用 YukiReflection 对全部日志的输出。

    isEnableMemberCache - field

    变更记录

    v1.0.0 添加

    v1.0.2 作废

    Member 的直接缓存功能已被移除,因为其存在内存溢出 (OOM) 问题

    configs - method

    inline fun configs(initiate: Configs.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    Configs 类实现了一个 lambda 方法体。

    你可以轻松地调用它进行配置。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html deleted file mode 100644 index 6ca3bcc..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/CurrentClass.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - CurrentClass - class | Yuki Reflection - - - - -

    CurrentClass - class

    class CurrentClass internal constructor(internal val classSet: Class<*>, internal val instance: Any)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前实例的类操作对象。

    name - field

    val name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 classSetClass.getName

    simpleName - field

    val simpleName: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 classSetClass.getSimpleName

    generic - method

    fun generic(): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前实例中的泛型父类。

    如果当前实例不存在泛型将返回 null

    generic - method

    inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前实例中的泛型父类。

    如果当前实例不存在泛型将返回 null

    superClass - method

    fun superClass(): SuperClass
    -

    变更记录

    v1.0.0 添加

    功能描述

    调用父类实例。

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    调用当前实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    调用当前实例中的方法。

    SuperClass - class

    inner class SuperClass internal constructor(internal val superClassSet: Class<*>)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前类的父类实例的类操作对象。

    name - field

    val name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 classSet 中父类的 Class.getName

    simpleName - field

    val simpleName: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 classSet 中父类的 Class.getSimpleName

    generic - method

    fun generic(): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    generic - method

    inline fun generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前实例父类中的泛型父类。

    如果当前实例不存在泛型将返回 null

    field - method

    inline fun field(initiate: FieldConditions): FieldFinder.Result.Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    调用父类实例中的变量。

    method - method

    inline fun method(initiate: MethodConditions): MethodFinder.Result.Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    调用父类实例中的方法。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html deleted file mode 100644 index fd0cc25..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/GenericClass.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - GenericClass - class | Yuki Reflection - - - - -

    GenericClass - class

    class GenericClass internal constructor(private val type: ParameterizedType)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 的泛型父类操作对象。

    argument - method

    fun argument(index: Int): Class<*>
    -
    inline fun <reified T> argument(index: Int): Class<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得泛型参数数组下标的 Class 实例。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html deleted file mode 100644 index 36070eb..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/bean/VariousClass.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - VariousClass - class | Yuki Reflection - - - - -

    VariousClass - class

    class VariousClass(private vararg val name: String)
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个不确定性 Class 类名装载器,通过 name 装载 Class 名称数组。

    get - method

    fun get(loader: ClassLoader? = null, initialize: Boolean): Class<*>
    -

    变更记录

    v1.0.0 添加

    功能描述

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    getOrNull - method

    fun getOrNull(loader: ClassLoader? = null, initialize: Boolean): Class<*>?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获取匹配的实体类。

    使用当前 loader 装载目标 Class

    匹配不到 Class 会返回 null,不会抛出异常。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html deleted file mode 100644 index 44b918b..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/factory/ReflectionFactory.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - ReflectionFactory - kt | Yuki Reflection - - - - -

    ReflectionFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是自定义 MemberClass 相关功能的查找匹配以及 invoke 的封装类。

    ClassLoader.listOfClasses - ext-method

    fun ClassLoader.listOfClasses(): List<String>
    -

    变更记录

    v1.0.0 添加

    功能描述

    写出当前 ClassLoader 下所有 Class 名称数组。

    注意

    此方法在 Class 数量过多时会非常耗时。

    若要按指定规则查找一个 Class,请使用 ClassLoader.searchClass 方法。

    ClassLoader.searchClass - ext-method

    inline fun ClassLoader.searchClass(context: Context?, name: String, async: Boolean, initiate: ClassConditions): DexClassFinder.Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过当前 ClassLoader 按指定条件查找并得到 Dex 中的 Class

    特别注意

    此方法在 Class 数量过多及查找条件复杂时会非常耗时。

    建议启用 async 或设置 name 参数,name 参数将在当前 APP 不同版本中自动进行本地缓存以提升效率。

    如果使用了 asyncname 参数,则必须填写 context 参数。

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    Class.hasExtends - ext-field

    val Class<*>.hasExtends: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 是否有继承关系,父类是 Any 将被认为没有继承关系。

    Class?.extends - ext-method

    infix fun Class<*>?.extends(other: Class<*>?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 是否继承于 other

    如果当前 Class 就是 other 也会返回 true

    如果当前 Classnullothernull 会返回 false

    功能示例

    你可以使用此方法来判断两个 Class 是否存在继承关系。

    示例如下

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否继承于 B
    -if (classA extends classB) {
    -    // Your code here.
    -}
    -

    Class?.notExtends - ext-method

    infix fun Class<*>?.notExtends(other: Class<*>?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 是否不继承于 other

    此方法相当于 extends 的反向判断。

    功能示例

    你可以使用此方法来判断两个 Class 是否不存在继承关系。

    示例如下

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否不继承于 B
    -if (classA notExtends classB) {
    -    // Your code here.
    -}
    -

    Class?.implements - ext-method

    infix fun Class<*>?.implements(other: Class<*>?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 是否实现了 other 接口类。

    如果当前 Classnullothernull 会返回 false

    功能示例

    你可以使用此方法来判断两个 Class 是否存在依赖关系。

    示例如下

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否实现了 B 接口类
    -if (classA implements classB) {
    -    // Your code here.
    -}
    -

    Class?.notImplements - ext-method

    infix fun Class<*>?.notImplements(other: Class<*>?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Class 是否未实现 other 接口类。

    此方法相当于 implements 的反向判断。

    功能示例

    你可以使用此方法来判断两个 Class 是否不存在依赖关系。

    示例如下

    // 假设下面这两个 Class 就是你需要判断的 Class
    -val classA: Class<*>?
    -val classB: Class<*>?
    -// 判断 A 是否未实现 B 接口类
    -if (classA notImplements classB) {
    -    // Your code here.
    -}
    -

    Class.toJavaPrimitiveType - ext-method

    fun Class<*>.toJavaPrimitiveType(): Class<*>
    -

    变更记录

    v1.0.0 添加

    功能描述

    自动转换当前 Class 为 Java 原始类型 (Primitive Type)。

    如果当前 Class 为 Java 或 Kotlin 基本类型将自动执行类型转换。

    当前能够自动转换的基本类型如下。

    • kotlin.Unit
    • java.lang.Void
    • java.lang.Boolean
    • java.lang.Integer
    • java.lang.Float
    • java.lang.Double
    • java.lang.Long
    • java.lang.Short
    • java.lang.Character
    • java.lang.Byte

    String.toClass - ext-method

    fun String.toClass(loader: ClassLoader?, initialize: Boolean): Class<*>
    -
    inline fun <reified T> String.toClass(loader: ClassLoader?, initialize: Boolean): Class<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过字符串类名转换为 loader 中的实体类。

    功能示例

    你可以直接填写你要查找的目标 Class,必须在默认 ClassLoader 下存在。

    示例如下

    "com.example.demo.DemoClass".toClass()
    -

    你还可以自定义 Class 所在的 ClassLoader

    示例如下

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -"com.example.demo.DemoClass".toClass(customClassLoader)
    -

    你还可以指定 Class 的目标类型。

    示例如下

    // 指定的 DemoClass 必须存在或为可访问的 stub
    -"com.example.demo.DemoClass".toClass<DemoClass>()
    -

    你还可以设置在获取到这个 Class 时是否自动执行其默认的静态方法块,默认情况下不会执行。

    示例如下

    // 获取并执行 DemoClass 默认的静态方法块
    -"com.example.demo.DemoClass".toClass(initialize = true)
    -

    默认的静态方法块在 Java 中使用如下方式定义。

    示例如下

    public class DemoClass {
    -
    -    static {
    -        // 这里是静态方法块的内容
    -    }
    -
    -    public DemoClass() {
    -        // ...
    -    }
    -}
    -

    String.toClassOrNull - ext-method

    fun String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<*>?
    -
    inline fun <reified T> String.toClassOrNull(loader: ClassLoader?, initialize: Boolean): Class<T>?
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过字符串类名转换为 loader 中的实体类。

    找不到 Class 会返回 null,不会抛出异常。

    功能示例

    用法请参考 String.toClass 方法。

    classOf - method

    inline fun <reified T> classOf(loader: ClassLoader?, initialize: Boolean): Class<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过 T 得到其 Class 实例并转换为实体类。

    功能示例

    我们要获取一个 ClassKotlin 下不通过反射时应该这样做。

    示例如下

    DemoClass::class.java
    -

    现在,你可以直接 cast 一个实例并获取它的 Class 对象,必须在当前 ClassLoader 下存在。

    示例如下

    classOf<DemoClass>()
    -

    若目标存在的 Classstub,通过这种方式,你还可以自定义 Class 所在的 ClassLoader

    示例如下

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -classOf<DemoClass>(customClassLoader)
    -

    String.hasClass - ext-method

    fun String.hasClass(loader: ClassLoader?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过字符串类名使用指定的 ClassLoader 查找是否存在。

    功能示例

    你可以轻松的使用此方法判断字符串中的类是否存在,效果等同于直接使用 Class.forName

    示例如下

    if("com.example.demo.DemoClass".hasClass()) {
    -    // Your code here.
    -}
    -

    填入方法中的 loader 参数可判断指定的 ClassLoader 中的 Class 是否存在。

    示例如下

    val customClassLoader: ClassLoader? = ... // 假设这个就是你的 ClassLoader
    -if("com.example.demo.DemoClass".hasClass(customClassLoader)) {
    -    // Your code here.
    -}
    -

    Class.hasField - ext-method

    inline fun Class<*>.hasField(initiate: FieldConditions): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找变量是否存在。

    Class.hasMethod - ext-method

    inline fun Class<*>.hasMethod(initiate: MethodConditions): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找方法是否存在。

    Class.hasConstructor - ext-method

    inline fun Class<*>.hasConstructor(initiate: ConstructorConditions): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找构造方法是否存在。

    Member.hasModifiers - ext-method

    inline fun Member.hasModifiers(conditions: ModifierConditions): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找 Member 中匹配的描述符。

    Class.hasModifiers - ext-method

    inline fun Class<*>.hasModifiers(conditions: ModifierConditions): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找 Class 中匹配的描述符。

    Class.field - ext-method

    inline fun Class<*>.field(initiate: FieldConditions): FieldFinder.Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找并得到变量。

    Class.method - ext-method

    inline fun Class<*>.method(initiate: MethodConditions): MethodFinder.Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找并得到方法。

    Class.constructor - ext-method

    inline fun Class<*>.constructor(initiate: ConstructorConditions): ConstructorFinder.Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    查找并得到构造方法。

    Class.generic - ext-method

    fun Class<*>.generic(): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Class.generic - ext-method

    inline fun Class<*>.generic(initiate: GenericClass.() -> Unit): GenericClass?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 Class 的泛型父类。

    如果当前实例不存在泛型将返回 null

    Any.current - ext-method

    inline fun <reified T : Any> T.current(ignored: Boolean): CurrentClass
    -
    inline fun <reified T : Any> T.current(ignored: Boolean, initiate: CurrentClass.() -> Unit): T
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前实例的类操作对象。

    Class.buildOf - ext-method

    inline fun Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): Any?
    -
    inline fun <T> Class<*>.buildOf(vararg args: Any?, initiate: ConstructorConditions): T?
    -

    变更记录

    v1.0.0 添加

    功能描述

    通过构造方法创建新实例,指定类型 T 或任意类型 Any

    Class.allMethods - ext-method

    inline fun Class<*>.allMethods(isAccessible: Boolean, result: (index: Int, method: Method) -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    遍历当前类中的所有方法。

    Class.allConstructors - ext-method

    inline fun Class<*>.allConstructors(isAccessible: Boolean, result: (index: Int, constructor: Constructor<*>) -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    遍历当前类中的所有构造方法。

    Class.allFields - ext-method

    inline fun Class<*>.allFields(isAccessible: Boolean, result: (index: Int, field: Field) -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    遍历当前类中的所有变量。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html deleted file mode 100644 index f2bc5b1..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/BaseFinder.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - BaseFinder - class | Yuki Reflection - - - - -

    BaseFinder - class

    abstract class BaseFinder
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是 ClassMember 查找类功能的基本类实现。

    BaseFinder.IndexTypeCondition - class

    inner class IndexTypeCondition internal constructor(private val type: IndexConfigType)
    -

    变更记录

    v1.0.0 添加

    功能描述

    字节码下标筛选实现类。

    index - method

    fun index(num: Int)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置下标。

    index 小于零则为倒序,此时可以使用 IndexTypeConditionSort.reverse 方法实现。

    可使用 IndexTypeConditionSort.firstIndexTypeConditionSort.last 设置首位和末位筛选条件。

    index - method

    fun index(): IndexTypeConditionSort
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到下标。

    IndexTypeConditionSort - class

    inner class IndexTypeConditionSort internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    字节码下标排序实现类。

    first - method

    fun first()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置满足条件的第一个。

    last - method

    fun last()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置满足条件的最后一个。

    reverse - method

    fun reverse(num: Int)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置倒序下标。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html deleted file mode 100644 index 5b3fa9c..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/CountRules.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - CountRules - class | Yuki Reflection - - - - -

    CountRules - class

    class CountRules private constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个模糊 ClassMember 数组 (下标) 个数条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    Int.isZero - i-ext-method

    fun Int.isZero(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否为 0。

    Int.moreThan - i-ext-method

    fun Int.moreThan(count: Int): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    大于 count

    Int.lessThan - i-ext-method

    fun Int.lessThan(count: Int): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    小于 count

    Int.inInterval - i-ext-method

    fun Int.inInterval(countRange: IntRange): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    countRange 区间 A ≤ this ≤ B。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html deleted file mode 100644 index 35ea41c..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ModifierRules.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - ModifierRules - class | Yuki Reflection - - - - -

    ModifierRules - class

    class ModifierRules private constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个 ClassMember 描述符条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    isPublic - i-ext-field

    val isPublic: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 public

    isPrivate - i-ext-field

    val isPrivate: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 private

    isProtected - i-ext-field

    val isProtected: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 protected

    isStatic - i-ext-field

    val isStatic: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 static

    对于任意的静态 ClassMember 可添加此描述进行确定。

    注意

    Kotlin → Jvm 后的 object 类中的方法并不是静态的。

    isFinal - i-ext-field

    val isFinal: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 final

    注意

    Kotlin → Jvm 后没有 open 符号标识的 ClassMember 和没有任何关联的 ClassMember 都将为 final

    isSynchronized - i-ext-field

    val isSynchronized: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 synchronized

    isVolatile - i-ext-field

    val isVolatile: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 类型是否包含 volatile

    isTransient - i-ext-field

    val isTransient: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 类型是否包含 transient

    isNative - i-ext-field

    val isNative: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 类型是否包含 native

    对于任意 JNI 对接的 Method 可添加此描述进行确定。

    isInterface - i-ext-field

    val isInterface: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    Class 类型是否包含 interface

    isAbstract - i-ext-field

    val isAbstract: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 abstract

    对于任意的抽象 ClassMember 可添加此描述进行确定。

    isStrict - i-ext-field

    val isStrict: Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    ClassMember 类型是否包含 strictfp

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html deleted file mode 100644 index 5e7a19b..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/NameRules.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - NameRules - class | Yuki Reflection - - - - -

    NameRules - class

    class NameRules private constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个模糊 ClassMember 名称条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    String.isSynthetic - i-ext-method

    fun String.isSynthetic(index: Int): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否为匿名类的主类调用对象。

    String.isOnlySymbols - i-ext-method

    fun String.isOnlySymbols(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有符号。

    String.isOnlyLetters - i-ext-method

    fun String.isOnlyLetters(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有字母。

    String.isOnlyNumbers - i-ext-method

    fun String.isOnlyNumbers(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有数字。

    String.isOnlyLettersNumbers - i-ext-method

    fun String.isOnlyLettersNumbers(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有字母或数字。

    String.isOnlyLowercase - i-ext-method

    fun String.isOnlyLowercase(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有小写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    String.isOnlyUppercase - i-ext-method

    fun String.isOnlyUppercase(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    是否只有大写字母。

    在没有其它条件的情况下设置此条件允许判断对象存在字母以外的字符。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html deleted file mode 100644 index d52f175..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/base/rules/ObjectRules.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - ObjectRules - class | Yuki Reflection - - - - -

    ObjectRules - class

    class ObjectRules private constructor(private val instance: Any)
    -

    变更记录

    v1.0.0 添加

    功能描述

    这是一个任意对象条件实现类。

    可对 R8 混淆后的 ClassMember 进行更加详细的定位。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html deleted file mode 100644 index 8cf6d8f..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/DexClassFinder.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - DexClassFinder - class | Yuki Reflection - - - - -

    DexClassFinder - class

    class DexClassFinder internal constructor(
    -    private val context: Context?,
    -    internal var name: String,
    -    internal var async: Boolean,
    -    override val loaderSet: ClassLoader?
    -) : ClassBaseFinder
    -

    变更记录

    v1.0.0 添加

    功能描述

    Class 查找类。

    可使用 BaseDexClassLoader 通过指定条件查找指定 Class 或一组 Class

    注意

    此功能尚在试验阶段,性能与稳定性可能仍然存在问题,使用过程遇到问题请向我们报告并帮助我们改进。

    companion object - object

    变更记录

    v1.0.0 添加

    clearCache - method

    fun clearCache(context: Context, versionName: String?, versionCode: Long?)
    -

    变更记录

    v1.0.0 添加

    功能描述

    清除当前 DexClassFinderClass 缓存。

    适用于全部通过 ClassLoader.searchClass 获取的 DexClassFinder

    fullName - field

    var fullName: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 完整名称。

    只会查找匹配到的 Class.getName

    例如 com.demo.Test 需要填写 com.demo.Test

    simpleName - field

    var simpleName: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 简单名称。

    只会查找匹配到的 Class.getSimpleName

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 会为空,此时你可以使用 singleName

    singleName - field

    var singleName: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 独立名称。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 只需要填写 Test$InnerTest

    from - method

    fun from(vararg name: String): FromPackageRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置在指定包名范围查找当前 Class

    设置后仅会在当前 name 开头匹配的包名路径下进行查找,可提升查找速度。

    例如 ↓

    com.demo.test

    com.demo.test.demo

    注意

    建议设置此参数指定查找范围,否则 Class 过多时将会非常慢。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 标识符筛选条件。

    可不设置筛选条件。

    fullName - method

    fun fullName(value: String): ClassNameRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 完整名称。

    只会查找匹配到的 Class.getName

    例如 com.demo.Test 需要填写 com.demo.Test

    simpleName - method

    fun simpleName(value: String): ClassNameRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 简单名称。

    只会查找匹配到的 Class.getSimpleName

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 会为空,此时你可以使用 singleName

    singleName - method

    fun singleName(value: String): ClassNameRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 独立名称。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    例如 com.demo.Test 只需要填写 Test

    对于匿名类例如 com.demo.Test$InnerTest 只需要填写 Test$InnerTest

    fullName - method

    fun fullName(conditions: NameConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 完整名称条件。

    只会查找匹配到的 Class.getName

    simpleName - method

    fun simpleName(conditions: NameConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 简单名称条件。

    只会查找匹配到的 Class.getSimpleName

    singleName - method

    fun singleName(conditions: NameConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 独立名称条件。

    设置后将首先使用 Class.getSimpleName,若为空则会使用 Class.getName 进行处理。

    extends - method

    inline fun <reified T> extends()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 继承的父类。

    extends - method

    fun extends(vararg name: String)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 继承的父类。

    会同时查找 name 中所有匹配的父类。

    implements - method

    inline fun <reified T> implements()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 实现的接口类。

    implements - method

    fun implements(vararg name: String)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 实现的接口类。

    会同时查找 name 中所有匹配的接口类。

    anonymous - method

    fun anonymous()
    -

    变更记录

    v1.0.0 添加

    功能描述

    标识 Class 为匿名类。

    例如 com.demo.Test$1com.demo.Test$InnerTest

    标识后你可以使用 enclosing 来进一步指定匿名类的 (封闭类) 主类。

    noExtends - method

    fun noExtends()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 没有任何继承。

    此时 Class 只应该继承于 Any

    注意

    设置此条件后 extends 将失效。

    noImplements - method

    fun noImplements()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 没有任何接口。

    注意

    设置此条件后 implements 将失效。

    noSuper - method

    fun noSuper()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 没有任何继承与接口。

    此时 Class 只应该继承于 Any

    注意

    设置此条件后 extendsimplements 将失效。

    enclosing - method

    inline fun <reified T> enclosing()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 匿名类的 (封闭类) 主类。

    enclosing - method

    fun enclosing(vararg name: String)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 匿名类的 (封闭类) 主类。

    会同时查找 name 中所有匹配的 (封闭类) 主类。

    FromPackageRules - class

    inner class FromPackageRules internal constructor(private val packages: ArrayList<ClassRulesData.PackageRulesData>)
    -

    变更记录

    v1.0.0 添加

    功能描述

    包名范围名称过滤匹配条件实现类。

    absolute - method

    fun absolute()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置包名绝对匹配。

    例如有如下包名 ↓

    com.demo.test.a

    com.demo.test.a.b

    com.demo.test.active

    若包名条件为 com.demo.test.a 则绝对匹配仅能匹配到第一个。

    相反地,不设置以上示例会全部匹配。

    ClassNameRules - class

    inner class ClassNameRules internal constructor(private val name: ClassRulesData.NameRulesData)
    -

    变更记录

    v1.0.0 添加

    功能描述

    类名匹配条件实现类。

    optional - method

    fun optional()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置类名可选。

    例如有如下类名 ↓

    com.demo.Test fullName / Test simpleName

    defpackage.a fullName / a simpleName

    这两个类名都是同一个类,但是在有些版本中被混淆有些版本没有。

    此时可设置类名为 com.demo.Test fullName / Test simpleName

    这样就可在完全匹配类名情况下使用类名而忽略其它查找条件,否则忽略此条件继续使用其它查找条件。

    member - method

    inline fun member(initiate: MemberRules.() -> Unit): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 满足的 Member 条件。

    field - method

    inline fun field(initiate: FieldRules.() -> Unit): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 满足的 Field 条件。

    method - method

    inline fun method(initiate: MethodRules.() -> Unit): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 满足的 Method 条件。

    constructor - method

    inline fun constructor(initiate: ConstructorRules.() -> Unit): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Class 满足的 Constructor 条件。

    Result - class

    inner class Result internal constructor(internal var isNotFound: Boolean, internal var throwable: Throwable?) : BaseResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    Class 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建监听结果事件方法体。

    get - method

    fun get(): Class<*>?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Class 本身。

    若有多个 Class 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    若你设置了 async 请使用 wait 方法。

    all - method

    fun all(): HashSet<Class<*>>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Class 本身数组。

    返回全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    若你设置了 async 请使用 waitAll 方法。

    all - method

    fun all(result: (Class<*>) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Class 本身数组 (依次遍历)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将不会执行。

    若你设置了 async 请使用 waitAll 方法。

    wait - method

    fun wait(result: (Class<*>?) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Class 本身 (异步)。

    若有多个 Class 结果只会回调第一个。

    在查找条件找不到任何结果的时候将回调 null。

    你需要设置 async 后此方法才会被回调,否则请使用 get 方法。

    waitAll - method

    fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Class 本身数组 (异步)。

    回调全部查找条件匹配的多个 Class 实例。

    在查找条件找不到任何结果的时候将回调空的 HashSet

    你需要设置 async 后此方法才会被回调,否则请使用 all 方法。

    onNoClassDefFoundError - method

    fun onNoClassDefFoundError(result: (Throwable) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    监听找不到 Class 时。

    ignored - method

    fun ignored(): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    忽略异常并停止打印任何错误日志。

    此时若要监听异常结果,你需要手动实现 onNoClassDefFoundError 方法。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html deleted file mode 100644 index 1a21fde..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/ConstructorRules.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - ConstructorRules - class | Yuki Reflection - - - - -

    ConstructorRules - class

    class ConstructorRules internal constructor(internal val rulesData: ConstructorRulesData) : BaseRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    Constructor 查找条件实现类。

    paramCount - field

    var paramCount: Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 标识符筛选条件。

    可不设置筛选条件。

    emptyParam - method

    fun emptyParam()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 空参数、无参数。

    param - method

    fun param(vararg paramType: Any)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    特别注意

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    param - method

    fun param(conditions: ObjectsConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数条件。

    特别注意

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    paramCount - method

    fun paramCount(numRange: IntRange)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html deleted file mode 100644 index 9ab04b3..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/FieldRules.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - FieldRules - class | Yuki Reflection - - - - -

    FieldRules - class

    class FieldRules internal constructor(internal val rulesData: FieldRulesData) : BaseRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 查找条件实现类。

    name - field

    var name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 名称。

    type - field

    var type: Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    name - method

    fun name(conditions: NameConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 名称条件。

    type - method

    fun type(conditions: ObjectConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 类型条件。

    可不填写类型。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html deleted file mode 100644 index e926087..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MemberRules.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - MemberRules - class | Yuki Reflection - - - - -

    MemberRules - class

    class MemberRules internal constructor(internal val rulesData: MemberRulesData) : BaseRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    Member 查找条件实现类。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Member 标识符筛选条件。

    可不设置筛选条件。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html deleted file mode 100644 index 55b477b..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/MethodRules.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - MethodRules - class | Yuki Reflection - - - - -

    MethodRules - class

    class MethodRules internal constructor(internal val rulesData: MethodRulesData) : BaseRules
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 查找条件实现类。

    name - field

    var name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 名称。

    paramCount - field

    var paramCount: Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    returnType - field

    var returnType: Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 返回值。

    可不填写返回值。

    modifiers - method

    fun modifiers(conditions: ModifierConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 标识符筛选条件。

    可不设置筛选条件。

    emptyParam - method

    fun emptyParam()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 空参数、无参数。

    param - method

    fun param(vararg paramType: Any)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Method 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    特别注意

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    param - method

    fun param(conditions: ObjectsConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数条件。

    特别注意

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    name - method

    fun name(conditions: NameConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 名称条件。

    paramCount - method

    fun paramCount(numRange: IntRange)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    paramCount - method

    fun paramCount(conditions: CountConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    returnType - method

    fun returnType(conditions: ObjectConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 返回值条件。

    可不填写返回值。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html deleted file mode 100644 index dd08295..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/classes/rules/result/MemberRulesResult.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - MemberRulesResult - class | Yuki Reflection - - - - -

    MemberRulesResult - class

    class MemberRulesResult internal constructor(private val rulesData: MemberRulesData)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当前 Member 查找条件结果实现类。

    none - method

    fun none(): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Member 在查找条件中个数为 0

    count - method

    fun count(num: Int): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数。

    count - method

    fun count(numRange: IntRange): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数范围。

    count - method

    fun count(conditions: CountConditions): MemberRulesResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Member 在查找条件中需要全部匹配的个数条件。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html deleted file mode 100644 index 628cc73..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/ConstructorFinder.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - ConstructorFinder - class | Yuki Reflection - - - - -

    ConstructorFinder - class

    class ConstructorFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
    -

    变更记录

    v1.0.0 添加

    功能描述

    Constructor 查找类。

    可通过指定类型查找指定 Constructor 或一组 Constructor

    paramCount - field

    var paramCount: Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 标识符筛选条件。

    可不设置筛选条件,默认模糊查找并取第一个匹配的 Constructor

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    emptyParam - method

    fun emptyParam(): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 空参数、无参数。

    param - method

    fun param(vararg paramType: Any): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Constructor 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    特别注意

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    param - method

    fun param(conditions: ObjectsConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数条件。

    特别注意

    无参 Constructor 请使用 emptyParam 设置查找条件。

    有参 Constructor 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(num: Int): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数。

    若参数个数小于零则忽略并使用 param

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(numRange: IntRange): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(conditions: CountConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Constructor 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置在 classSet 的所有父类中查找当前 Constructor

    注意

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    Constructor 重查找实现类,可累计失败次数直到查找成功。

    constructor - method

    inline fun constructor(initiate: ConstructorConditions)
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建需要重新查找的 Constructor

    你可以添加多个备选 Constructor,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Constructor<*>>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当在 RemedyPlan 中找到结果时。

    功能示例

    你可以方便地对重查找的 Constructor 实现 onFind 方法。

    示例如下

    constructor {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, internal val throwable: Throwable?) : BaseResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    Constructor 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建监听结果事件方法体。

    功能示例

    你可以使用 lambda 形式创建 Result 类。

    示例如下

    constructor {
    -    // Your code here.
    -}.result {
    -    get().call()
    -    all()
    -    remedys {}
    -    onNoSuchConstructor {}
    -}
    -

    get - method

    fun get(): Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Constructor 实例处理类。

    若有多个 Constructor 结果只会返回第一个。

    特别注意

    若你设置了 remedys 请使用 wait 回调结果方法。

    功能示例

    你可以通过获得方法所在实例来执行构造方法创建新的实例对象。

    示例如下

    constructor {
    -    // Your code here.
    -}.get().call()
    -

    你可以 cast 构造方法为指定类型的实例对象。

    示例如下

    constructor {
    -    // Your code here.
    -}.get().newInstance<TestClass>()
    -

    特别注意

    若构造方法含有参数则后方参数必填。

    示例如下

    constructor {
    -    // Your code here.
    -}.get().newInstance<TestClass>("param1", "param2")
    -

    all - method

    fun all(): ArrayList<Instance>
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Constructor 实例处理类数组。

    返回全部查找条件匹配的多个 Constructor 实例结果。

    功能示例

    你可以通过此方法来获得当前条件结果中匹配的全部 Constructor

    示例如下

    constructor {
    -    // Your code here.
    -}.all().forEach { instance ->
    -    instance.call(...)
    -}
    -

    give - method

    fun give(): Constructor<*>?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Constructor 本身。

    若有多个 Constructor 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Constructor<*>>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Constructor 本身数组。

    返回全部查找条件匹配的多个 Constructor 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(initiate: Instance.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Constructor 实例处理类,配合 RemedyPlan 使用。

    若有多个 Constructor 结果只会返回第一个。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(initiate: ArrayList<Instance>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Constructor 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Constructor 实例结果。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建 Constructor 重查找功能。

    功能示例

    当你遇到一种 Constructor 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchConstructor 捕获异常二次查找 Constructor

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    示例如下

    constructor {
    -    // Your code here.
    -}.remedys {
    -    constructor {
    -        // Your code here.
    -    }
    -    constructor {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchConstructor - method

    inline fun onNoSuchConstructor(result: (Throwable) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    监听找不到 Constructor 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    忽略异常并停止打印任何错误日志。

    注意

    此时若要监听异常结果,你需要手动实现 onNoSuchConstructor 方法。

    Instance - class

    inner class Instance internal constructor(private val constructor: Constructor<*>?)
    -

    变更记录

    v1.0.0 添加

    功能描述

    Constructor 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Constructor 创建目标实例,不指定目标实例类型。

    newInstance - method

    fun <T> newInstance(vararg args: Any?): T?
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Constructor 创建目标实例 ,指定 T 目标实例类型。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html deleted file mode 100644 index 46bf7c2..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/FieldFinder.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - FieldFinder - class | Yuki Reflection - - - - -

    FieldFinder - class

    class FieldFinder internal constructor(override val classSet: Class<*>?) : MemberBaseFinder
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 查找类。

    可通过指定类型查找指定 Field 或一组 Field

    name - field

    var name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 名称。

    特别注意

    若不填写名称则必须存在一个其它条件。

    type - field

    var type: Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 类型。

    可不填写类型。

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 标识符筛选条件。

    可不设置筛选条件。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    order - method

    fun order(): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    顺序筛选字节码的下标。

    name - method

    fun name(value: String): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 名称。

    特别注意

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    name - method

    fun name(conditions: NameConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 名称条件。

    特别注意

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    type - method

    fun type(value: Any): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 类型。

    可不填写类型。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    type - method

    fun type(conditions: ObjectConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Field 类型条件。

    可不填写类型。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置在 classSet 的所有父类中查找当前 Field

    注意

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 重查找实现类,可累计失败次数直到查找成功。

    field - method

    inline fun field(initiate: FieldConditions): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建需要重新查找的 Field

    你可以添加多个备选 Field,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Field>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当在 RemedyPlan 中找到结果时。

    功能示例

    你可以方便地对重查找的 Field 实现 onFind 方法。

    示例如下

    field {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建监听结果事件方法体。

    功能示例

    你可以使用 lambda 形式创建 Result 类。

    示例如下

    field {
    -    // Your code here.
    -}.result {
    -    get(instance).set("something")
    -    get(instance).string()
    -    get(instance).cast<CustomClass>()
    -    get().boolean()
    -    all(instance)
    -    give()
    -    giveAll()
    -    onNoSuchField {}
    -}
    -

    get - method

    fun get(instance: Any?): Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Field 实例处理类。

    若有多个 Field 结果只会返回第一个。

    功能示例

    你可以轻松地得到 Field 的实例以及使用它进行设置实例。

    示例如下

    field {
    -    // Your code here.
    -}.get(instance).set("something")
    -

    如果你取到的是静态 Field,可以不需要设置实例。

    示例如下

    field {
    -    // Your code here.
    -}.get().set("something")
    -

    all - method

    fun all(instance: Any?): ArrayList<Instance>
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Field 实例处理类数组。

    返回全部查找条件匹配的多个 Field 实例结果。

    功能示例

    你可以通过此方法来获得当前条件结果中匹配的全部 Field,其 Field 所在实例用法与 get 相同。

    示例如下

    field {
    -    // Your code here.
    -}.all(instance).forEach { instance ->
    -    instance.self
    -}
    -

    give - method

    fun give(): Field?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Field 本身。

    若有多个 Field 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Field>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Field 本身数组。

    返回全部查找条件匹配的多个 Field 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(instance: Any?, initiate: Instance.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Field 实例处理类,配合 RemedyPlan 使用。

    若有多个 Field 结果只会返回第一个。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Field 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Field 实例结果。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建 Field 重查找功能。

    功能示例

    当你遇到一种 Field 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchField 捕获异常二次查找 Field

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    示例如下

    field {
    -    // Your code here.
    -}.remedys {
    -    field {
    -        // Your code here.
    -    }
    -    field {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchField - method

    fun onNoSuchField(result: (Throwable) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    监听找不到 Field 时。

    ignored - method

    fun ignored(): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    忽略异常并停止打印任何错误日志。

    注意

    此时若要监听异常结果,你需要手动实现 onNoSuchField 方法。

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val field: Field?)
    -

    变更记录

    v1.0.0 添加

    功能描述

    Field 实例变量处理类。

    current - method

    fun current(ignored: Boolean): CurrentClass?
    -
    inline fun current(ignored: Boolean, initiate: CurrentClass.() -> Unit): Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得当前 Field 自身 self 实例的类操作对象 CurrentClass

    cast - method

    fun <T> cast(): T?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field 实例。

    byte - method

    fun byte(): Byte?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Byte 实例。

    int - method

    fun int(): Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Int 实例。

    long - method

    fun long(): Long
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Long 实例。

    short - method

    fun short(): Short
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Short 实例。

    double - method

    fun double(): Double
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Double 实例。

    float - method

    fun float(): Float
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Float 实例。

    string - method

    fun string(): String
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field String 实例。

    char - method

    fun char(): Char
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Char 实例。

    boolean - method

    fun boolean(): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Boolean 实例。

    any - method

    fun any(): Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Any 实例。

    array - method

    inline fun <reified T> array(): Array<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field Array 实例。

    list - method

    inline fun <reified T> list(): List<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到当前 Field List 实例。

    set - method

    fun set(any: Any?)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Field 实例。

    setTrue - method

    fun setTrue()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Field 实例为 true

    特别注意

    请确保实例对象类型为 Boolean

    setFalse - method

    fun setFalse()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Field 实例为 false

    特别注意

    请确保实例对象类型为 Boolean

    setNull - method

    fun setNull()
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置当前 Field 实例为 null

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html deleted file mode 100644 index d669a48..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/finder/members/MethodFinder.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - MethodFinder - class | Yuki Reflection - - - - -

    MethodFinder - class

    class MethodFinder internal constructor(override val classSet: Class<*>) : MemberBaseFinder
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 查找类。

    可通过指定类型查找指定 Method 或一组 Method

    name - field

    var name: String
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 名称。

    特别注意

    若不填写名称则必须存在一个其它条件。

    paramCount - field

    var paramCount: Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此变量指定参数个数。

    若参数个数小于零则忽略并使用 param

    returnType - field

    var returnType: Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 返回值,可不填写返回值。

    modifiers - method

    fun modifiers(conditions: ModifierConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 标识符筛选条件。

    可不设置筛选条件。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    emptyParam - method

    fun emptyParam(): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 空参数、无参数。

    param - method

    fun param(vararg paramType: Any): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数。

    如果同时使用了 paramCountparamType 的数量必须与 paramCount 完全匹配。

    如果 Method 中存在一些无意义又很长的类型,你可以使用 VagueType 来替代它。

    特别注意

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    param - method

    fun param(conditions: ObjectsConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数条件。

    特别注意

    无参 Method 请使用 emptyParam 设置查找条件。

    有参 Method 必须使用此方法设定参数或使用 paramCount 指定个数。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    order - method

    fun order(): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    顺序筛选字节码的下标。

    name - method

    fun name(value: String): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 名称。

    特别注意

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    name - method

    fun name(conditions: NameConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 名称条件。

    特别注意

    若不填写名称则必须存在一个其它条件。

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(num: Int): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数。

    若参数个数小于零则忽略并使用 param

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(numRange: IntRange): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数范围。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数范围。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    paramCount - method

    fun paramCount(conditions: CountConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 参数个数条件。

    你可以不使用 param 指定参数类型而是仅使用此方法指定参数个数条件。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    returnType - method

    fun returnType(value: Any): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 返回值。

    可不填写返回值。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    returnType - method

    fun returnType(conditions: ObjectConditions): IndexTypeCondition
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置 Method 返回值条件。

    可不填写返回值。

    特别注意

    存在多个 IndexTypeCondition 时除了 order 只会生效最后一个。

    superClass - method

    fun superClass(isOnlySuperClass: Boolean)
    -

    变更记录

    v1.0.0 添加

    功能描述

    设置在 classSet 的所有父类中查找当前 Method

    注意

    若当前 classSet 的父类较多可能会耗时,API 会自动循环到父类继承是 Any 前的最后一个类。

    RemedyPlan - class

    inner class RemedyPlan internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 重查找实现类,可累计失败次数直到查找成功。

    method - method

    inline fun method(initiate: MethodConditions): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建需要重新查找的 Method

    你可以添加多个备选 Method,直到成功为止,若最后依然失败,将停止查找并输出错误日志。

    Result - class

    inner class Result internal constructor()
    -

    变更记录

    v1.0.0 添加

    功能描述

    RemedyPlan 结果实现类。

    onFind - method

    fun onFind(initiate: HashSet<Method>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    当在 RemedyPlan 中找到结果时。

    功能示例

    你可以方便地对重查找的 Method 实现 onFind 方法。

    示例如下

    method {
    -    // Your code here.
    -}.onFind {
    -    // Your code here.
    -}
    -

    Result - class

    inner class Result internal constructor(internal val isNoSuch: Boolean, private val throwable: Throwable?) : BaseResult
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 查找结果实现类。

    result - method

    inline fun result(initiate: Result.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建监听结果事件方法体。

    功能示例

    你可以使用 lambda 形式创建 Result 类。

    示例如下

    method {
    -    // Your code here.
    -}.result {
    -    get(instance).call()
    -    all(instance)
    -    remedys {}
    -    onNoSuchMethod {}
    -}
    -

    get - method

    fun get(instance: Any?): Instance
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Method 实例处理类。

    若有多个 Method 结果只会返回第一个。

    特别注意

    若你设置了 remedys 请使用 wait 回调结果方法。

    功能示例

    你可以通过获得方法所在实例来执行 Method

    示例如下

    method {
    -    // Your code here.
    -}.get(instance).call()
    -

    若当前为静态方法,你可以不设置实例。

    示例如下

    method {
    -    // Your code here.
    -}.get().call()
    -

    all - method

    fun all(instance: Any?): ArrayList<Instance>
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Method 实例处理类数组。

    返回全部查找条件匹配的多个 Method 实例结果。

    功能示例

    你可以通过此方法来获得当前条件结果中匹配的全部 Method,其方法所在实例用法与 get 相同。

    示例如下

    method {
    -    // Your code here.
    -}.all(instance).forEach { instance ->
    -    instance.call(...)
    -}
    -

    give - method

    fun give(): Method?
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Method 本身。

    若有多个 Method 结果只会返回第一个。

    在查找条件找不到任何结果的时候将返回 null

    giveAll - method

    fun giveAll(): HashSet<Method>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到 Method 本身数组。

    返回全部查找条件匹配的多个 Method 实例。

    在查找条件找不到任何结果的时候将返回空的 HashSet

    wait - method

    fun wait(instance: Any?, initiate: Instance.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Method 实例处理类,配合 RemedyPlan 使用。

    若有多个 Method 结果只会返回第一个。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    waitAll - method

    fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
    -

    变更记录

    v1.0.0 添加

    功能描述

    获得 Method 实例处理类数组,配合 RemedyPlan 使用。

    返回全部查找条件匹配的多个 Method 实例结果。

    特别注意

    若你设置了 remedys 必须使用此方法才能获得结果。

    若你没有设置 remedys 此方法将不会被回调。

    remedys - method

    inline fun remedys(initiate: RemedyPlan.() -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    创建 Method 重查找功能。

    功能示例

    当你遇到一种 Method 可能存在不同形式的存在时,可以使用 RemedyPlan 重新查找它,而没有必要使用 onNoSuchMethod 捕获异常二次查找 Method

    若第一次查找失败了,你还可以在这里继续添加此方法体直到成功为止。

    示例如下

    method {
    -    // Your code here.
    -}.remedys {
    -    method {
    -        // Your code here.
    -    }
    -    method {
    -        // Your code here.
    -    }
    -}
    -

    onNoSuchMethod - method

    inline fun onNoSuchMethod(result: (Throwable) -> Unit): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    监听找不到 Method 时。

    只会返回第一次的错误信息,不会返回 RemedyPlan 的错误信息。

    ignored - method

    fun ignored(): Result
    -

    变更记录

    v1.0.0 添加

    功能描述

    忽略异常并停止打印任何错误日志。

    注意

    此时若要监听异常结果,你需要手动实现 onNoSuchMethod 方法。

    Instance - class

    inner class Instance internal constructor(private val instance: Any?, private val method: Method?)
    -

    变更记录

    v1.0.0 添加

    功能描述

    Method 实例处理类。

    call - method

    fun call(vararg args: Any?): Any?
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,不指定返回值类型。

    invoke - method

    fun <T> invoke(vararg args: Any?): T?
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 T 返回值类型。

    byte - method

    fun byte(vararg args: Any?): Byte?
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Byte 返回值类型。

    int - method

    fun int(vararg args: Any?): Int
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Int 返回值类型。

    long - method

    fun long(vararg args: Any?): Long
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Long 返回值类型。

    short - method

    fun short(vararg args: Any?): Short
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Short 返回值类型。

    double - method

    fun double(vararg args: Any?): Double
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Double 返回值类型。

    float - method

    fun float(vararg args: Any?): Float
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Float 返回值类型。

    string - method

    fun string(vararg args: Any?): String
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 String 返回值类型。

    char - method

    fun char(vararg args: Any?): Char
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Char 返回值类型。

    boolean - method

    fun boolean(vararg args: Any?): Boolean
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Boolean 返回值类型。

    array - method

    inline fun <reified T> array(vararg args: Any?): Array<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 Array 返回值类型。

    list - method

    inline fun <reified T> list(vararg args: Any?): List<T>
    -

    变更记录

    v1.0.0 添加

    功能描述

    执行 Method,指定 List 返回值类型。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html deleted file mode 100644 index 1845b19..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ComponentTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - ComponentTypeFactory - kt | Yuki Reflection - - - - -

    ComponentTypeFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 Android 相关组件的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html deleted file mode 100644 index 6e7a0d4..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/GraphicsTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - GraphicsTypeFactory - kt | Yuki Reflection - - - - -

    GraphicsTypeFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 Android 相关 GraphicsClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html deleted file mode 100644 index b333c47..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/android/ViewTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - ViewTypeFactory - kt | Yuki Reflection - - - - -

    ViewTypeFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 Android 相关 WidgetClass 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html deleted file mode 100644 index b37cdc9..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/defined/DefinedTypeFactory.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - DefinedTypeFactory - kt | Yuki Reflection - - - - -

    DefinedTypeFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是一个内部类型的定义常量类,主要用于反射 API 相关用法的延伸。

    VagueType - field

    val VagueType: Class<*>
    -

    变更记录

    v1.0.0 添加

    功能描述

    得到模糊类型。

    - - - diff --git a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html b/docs/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html deleted file mode 100644 index 867204b..0000000 --- a/docs/zh-cn/api/public/com/highcapable/yukireflection/type/java/VariableTypeFactory.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - VariableTypeFactory - kt | Yuki Reflection - - - - -

    VariableTypeFactory - kt

    变更记录

    v1.0.0 添加

    功能描述

    这是一个预置反射类型的常量类,主要为 Java 相关基本变量类型的 Class 内容,跟随版本更新会逐一进行增加。

    详情可 点击这里在新窗口中打开 进行查看。

    - - - diff --git a/docs/zh-cn/config/api-example.html b/docs/zh-cn/config/api-example.html deleted file mode 100644 index 76790ff..0000000 --- a/docs/zh-cn/config/api-example.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - API 基本配置 | Yuki Reflection - - - - -

    API 基本配置

    这里介绍了 YukiReflection 的基本配置方法。

    YukiReflection 无需一些复杂的配置即可直接开始使用,且不会与 Java 原生的反射 API 冲突。

    你可以在使用之前对 YukiReflection 进行一些功能配置。

    获取 API 版本

    你可以通过如下方式获取当前 YukiReflection 的 API 版本。

    示例如下

    // 获取版本名称
    -val versionName = YukiReflection.API_VERSION_NAME
    -// 获取版本号
    -val versionCode = YukiReflection.API_VERSION_CODE
    -

    你可以通过获取版本进行一些不同版本差异的判断或用于显示在关于信息中。

    小提示

    更多功能请参考 YukiReflection

    配置 API 相关功能

    你可以通过 YukiReflection.configs { ... } 方法或 YukiReflection.Configs 来配置相关功能。

    自定义调试日志标签

    你可以使用如下方式来自定义调试日志的标签。

    API 内部的日志将会使用此标签进行打印。

    示例如下

    // 通过 configs 方法
    -YukiReflection.configs {
    -    debugTag = "YourCustomTag"
    -}
    -// 直接设置
    -YukiReflection.Configs.debugTag = "YourCustomTag"
    -

    启用或禁用 Debug 模式

    你可以使用如下方式来启用或禁用 Debug 模式。

    Debug 模式默认是关闭的,启用后将会打印详细日志 (例如反射查找功能的耗时) 到控制台。

    示例如下

    // 通过 configs 方法
    -YukiReflection.configs {
    -    isDebug = true
    -}
    -// 直接设置
    -YukiReflection.Configs.isDebug = true
    -

    启用或禁用调试日志的输出功能

    你可以使用如下方式来启用或禁用调试日志的输出功能。

    此功能默认启用,关闭后将会停用 YukiReflection 对全部日志的输出。

    示例如下

    // 通过 configs 方法
    -YukiReflection.configs {
    -    isAllowPrintingLogs = true
    -}
    -// 直接设置
    -YukiReflection.Configs.isAllowPrintingLogs = true
    -

    使用 configs 方法配置

    为了一次性配置多个功能,你可以直接使用 YukiReflection.configs { ... } 方法进行配置。

    示例如下

    YukiReflection.configs {
    -    debugTag = "YourCustomTag"
    -    isDebug = true
    -    isAllowPrintingLogs = true
    -}
    -

    小提示

    更多功能请参考 YukiReflection.configs 方法、YukiReflection.Configs

    - - - diff --git a/docs/zh-cn/config/api-exception.html b/docs/zh-cn/config/api-exception.html deleted file mode 100644 index 1a49bc5..0000000 --- a/docs/zh-cn/config/api-exception.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - - - API 异常处理 | Yuki Reflection - - - - -

    API 异常处理

    异常是在开发过程经常遇到的主要问题,这里介绍了 YukiReflection 在使用过程中可能遇到的常见异常以及处理方式。

    这里的异常说明只会同步最新的 API 版本,较旧的 API 版本的异常将不会再进行说明,请始终保持 API 版本为最新。

    非阻断异常

    这些异常不会导致 APP 停止运行 (FC),但是会在控制台打印 E 级别的日志,也可能会停止继续执行相关功能。

    exception

    loggerE

    Method/Constructor/Field match type "TYPE" not allowed

    异常原因

    在查找方法、构造方法以及变量时设置了不允许的参数类型。

    示例如下

    // 查找一个方法
    -method {
    -    // ❗设置了无效的类型举例
    -    param(false, 1, 0)
    -    // ❗设置了无效的类型举例
    -    returnType = false
    -}
    -
    -// 查找一个变量
    -field {
    -    // ❗设置了无效的类型举例
    -    type = false
    -}
    -

    解决方案

    在查找中 paramreturnTypetype 中仅接受 ClassStringVariousClass 类型的传值,不可传入参数实例。

    示例如下

    // 查找一个方法
    -method {
    -    // ✅ 正确的使用方法举例
    -    param(BooleanType, IntType, IntType)
    -    // ✅ 正确的使用方法举例
    -    returnType = BooleanType
    -    // ✅ 以下方案也是正确的
    -    returnType = "java.lang.Boolean"
    -}
    -
    -// 查找一个变量
    -field {
    -    // ✅ 正确的使用方法举例
    -    type = BooleanType
    -}
    -
    exception

    loggerE

    NoSuchMethod/NoSuchConstructor/NoSuchField happend in [NAME]

    异常原因

    在查找方法、构造方法以及变量时并未找到目标方法、构造方法以及变量。

    解决方案

    请确认你的查找条件是否能正确匹配到目标 Class 中的指定方法、构造方法以及变量。

    exception

    loggerE

    Trying COUNT times and all failure by RemedyPlan

    异常原因

    使用 RemedyPlan 重新查找方法、构造方法、变量时依然没有找到方法、构造方法、变量。

    解决方案

    请确认你设置的 RemedyPlan 参数以及当前 APP 内存在的 Class,再试一次。

    exception

    loggerE

    You must set a condition when finding a Method/Constructor/Field

    异常原因

    在查找方法、构造方法以及变量时并未设置任何条件。

    示例如下

    method {
    -    // 这里没有设置任何条件
    -}
    -

    解决方案

    请将查找条件补充完整并再试一次。

    exception

    loggerE

    Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

    异常原因

    通过 ClassLoader.searchClass 找不到需要查找的 Class 对象。

    示例如下

    customClassLoader?.searchClass {
    -    from(...)
    -    // ...
    -}.get()
    -

    解决方案

    这是一个安全异常,请检查你设置的条件,使用相关工具查看所在 Dex 中的 Class 以及字节码对象特征,并再试一次。

    exception

    loggerE

    Can't find this Method/Constructor/Field in [CLASS]: CONTENT Generated by YukiReflection#ReflectionTool

    异常原因

    通过指定条件找不到需要查找的方法、构造方法以及变量。

    示例如下

    TargetClass.method {
    -    name = "test"
    -    param(BooleanType)
    -}
    -

    解决方案

    这是一个安全异常,请检查你设置的条件,使用相关工具查看所在 Class 中的字节码对象特征,并再试一次。

    exception

    loggerE

    The number of VagueType must be at least less than the count of paramTypes

    异常原因

    MethodConstructor 查找条件中错误地使用了 VagueType

    示例如下

    TargetClass.method {
    -    name = "test"
    -    // <情景1>
    -    param(VagueType)
    -    // <情景2>
    -    param(VagueType, VagueType ...)
    -}
    -

    解决方案

    VagueType 不能在方法、构造方法参数中完全填充,若存在这样的需求请使用 paramCount

    exception

    loggerE

    Field match type class is not found

    异常原因

    在查找变量时所设置的查找条件中 typeClass 实例未被找到。

    示例如下

    field {
    -    name = "test"
    -    // 假设这里设置的 type 的 Class 并不存在
    -    type = "com.example.TestClass"
    -}
    -

    解决方案

    请检查查找条件中 typeClass 是否存在,然后再试一次。

    exception

    loggerE

    Method match returnType class is not found

    异常原因

    在查找方法时所设置的查找条件中 returnTypeClass 实例未被找到。

    示例如下

    method {
    -    name = "test"
    -    // 假设这里设置的 returnType 的 Class 并不存在
    -    returnType = "com.example.TestClass"
    -}
    -

    解决方案

    请检查查找条件中 returnTypeClass 是否存在,然后再试一次。

    exception

    loggerE

    Method/Constructor match paramType[INDEX] class is not found

    异常原因

    在查找方法、构造方法时所设置的查找条件中 paramindex 号下标的 Class 实例未被找到。

    method {
    -    name = "test"
    -    // 假设这里设置的 1 号下标的 Class 并不存在
    -    param(StringClass, "com.example.TestClass", BooleanType)
    -}
    -

    解决方案

    请检查查找条件中 paramindex 号下标的 Class 是否存在,然后再试一次。

    阻断异常

    这些异常会直接导致 APP 停止运行 (FC),同时会在控制台打印 E 级别的日志。

    exception

    NoClassDefFoundError

    Can't find this Class in [CLASSLOADER]: CONTENT Generated by YukiReflection#ReflectionTool

    异常原因

    通过 String.toClass(...)classOf<...>() 找不到需要查找的 Class 对象。

    示例如下

    "com.demo.Test".toClass()
    -

    解决方案

    请检查当前字符串或实体匹配到的 Class 是否存在于当前 ClassLoader,并再试一次。

    exception

    IllegalStateException

    ClassLoader [CLASSLOADER] is not a DexClassLoader

    异常原因

    使用 ClassLoader.searchClass 查找 Class 但是当前 ClassLoader 并不继承于 BaseDexClassLoader

    解决方案

    这种情况基本不存在,除非当前 APP 引用了非 ART 平台的可执行文件 (但是这种情况还是不会存在) 或当前 ClassLoader 为空。

    exception

    IllegalStateException

    VariousClass match failed of those CLASSES

    异常原因

    在使用 VariousClass 创建不确定的 Class 对象时全部的 Class 都没有被找到。

    解决方案

    检查当前 APP 内是否存在其中能够匹配的 Class 后,再试一次。

    exception

    IllegalStateException

    paramTypes is empty, please use emptyParam() instead

    异常原因

    在查找方法、构造方法时保留了空的 param 方法。

    示例如下

    method {
    -    name = "test"
    -    // 括号内没有填写任何参数
    -    param()
    -}
    -

    解决方案

    若要标识此方法、构造方法没有参数,你可以有如下设置方法。

    第一种,设置 emptyParam (推荐)

    示例如下

    method {
    -    name = "test"
    -    emptyParam()
    -}
    -

    第二种,设置 paramCount = 0

    示例如下

    method {
    -    name = "test"
    -    paramCount = 0
    -}
    -
    exception

    IllegalStateException

    Cannot create classes cache for "android", please remove "name" param

    异常原因

    在系统框架 (android) 中使用了 DexClassFinder 的缓存功能 searchClass(name = ...)

    示例如下

    searchClass(name = "test") {
    -    from(...)
    -    // ...
    -}.get()
    -

    解决方案

    由于缓存会将找到的 Class 名称存入 SharedPreferences,但是系统框架不存在 data 目录,所以请不要在系统框架中使用此功能。

    exception

    IllegalStateException

    Target Class type cannot cast to TYPE

    异常原因

    使用 Class.toClassClass.toClassOrNullGenericClass.argument 方法将字符串类名转换为目标 Class 时声明了错误的类型。

    以下使用 Class.toClass 方法来进行示例。

    示例如下

    // 假设目标类型是 Activity 但是被错误地转换为了 WrongClass 类型
    -val clazz = "android.app.Activity".toClass<WrongClass>()
    -

    解决方案

    示例如下

    // <解决方案 1> 填写正确的类型
    -val clazz1 = "android.app.Activity".toClass<Activity>()
    -// <解决方案 2> 不填写泛型声明
    -val clazz2 = "android.app.Activity".toClass()
    -

    请确保执行方法后声明的泛型是指定的目标 Class 类型,在不确定目标类型的情况下你可以不需要填写泛型声明。

    - - - diff --git a/docs/zh-cn/guide/home.html b/docs/zh-cn/guide/home.html deleted file mode 100644 index 194c24b..0000000 --- a/docs/zh-cn/guide/home.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - 介绍 | Yuki Reflection - - - - -

    介绍

    YukiReflection 是一个基于 Java 和 Android 平台的反射 API。

    背景

    这是一个使用 Kotlin 基于 Java 原生反射 API 重新打造的一套简洁、高效的反射 API。

    YukiReflection 同时也是 YukiHookAPI在新窗口中打开 正在使用的核心功能。

    名称取自 《ももくり》女主 栗原 雪(Yuki)在新窗口中打开

    用途

    YukiReflection 完全采用 Kotlin lambda 语法构建。

    它能取代 Java 原生的反射 API在新窗口中打开,使用更加人性化的语言实现一套更加完善的反射方案。

    语言要求

    请使用 Kotlin,API 部分代码构成同样兼容 Java 但基础反射场景的实现可能完全无法使用

    文档全部的 Demo 示例代码都将使用 Kotlin 进行描述,如果你完全不会使用 Kotlin 那你将有可能无法使用 YukiReflection

    灵感来源

    YukiReflection 最初是集成在 YukiHookAPI在新窗口中打开 项目中的核心功能,现在进行了解耦合,使得这套反射 API 可以在任何 Java 和 Android 平台的项目中使用。

    现在,我们只需要编写少量的代码,就能实现一个简单的反射调用。

    借助 Kotlin 优雅的 lambda 写法以及 YukiReflection,可以让你的反射逻辑更加美观清晰。

    示例如下

    "android.os.SystemProperties".toClass()
    -    .method {
    -        name = "get"
    -        param(StringClass, StringClass)
    -    }.get().call("ro.system.build.fingerprint", "none")
    -
    Class.forName("android.os.SystemProperties")
    -    .getDeclaredMethod("get", String::class.java, String::class.java)
    -    .apply { isAccessible = true }
    -    .invoke(null, "ro.system.build.fingerprint", "none")
    -
    - - - diff --git a/docs/zh-cn/guide/quick-start.html b/docs/zh-cn/guide/quick-start.html deleted file mode 100644 index 25f5aa7..0000000 --- a/docs/zh-cn/guide/quick-start.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - 快速开始 | Yuki Reflection - - - - -

    快速开始

    集成 YukiReflection 到你的项目中。

    环境要求

    • Windows 7 及以上/macOS 10.14 及以上/Linux 发行版 (Arch/Debian)

    • Android Studio 2021.1 及以上

    • IntelliJ IDEA 2021.1 及以上

    • Kotlin 1.7.0 及以上

    • Android Gradle Plugin 7.0 及以上

    • Gradle 7.0 及以上

    • Java 11 及以上

    项目要求

    项目需要使用 Android StudioIntelliJ IDEA 创建且类型为 Java 或 Android 项目并已集成 Kotlin 环境依赖。

    集成依赖

    我们推荐使用 Kotlin DSL 作为 Gradle 构建脚本语言并推荐使用 SweetDependency在新窗口中打开 来管理依赖。

    SweetDependency 方式

    在你的项目 SweetDependency 配置文件中添加存储库和依赖。

    示例如下

    repositories:
    -  # MavenCentral 有 2 小时缓存,若无法集成最新版本请添加
    -  sonatype-oss-releases:
    -
    -libraries:
    -  com.highcapable.yukireflection:
    -    api:
    -      version: +
    -  ...
    -

    添加完成后运行一次 Gradle Sync,所有依赖版本将自动装配。

    接下来,在你的项目 build.gradle.kts 中部署依赖。

    示例如下

    dependencies {
    -    implementation(com.highcapable.yukireflection.api)
    -    // ...
    -}
    -

    传统方式 (不推荐)

    在你的项目 build.gradle.ktsbuild.gradle 中添加存储库。

    Kotlin DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral 有 2 小时缓存,若无法集成最新版本请添加此地址
    -    maven { url("https://s01.oss.sonatype.org/content/repositories/releases/") }
    -}
    -

    Groovy DSL

    repositories {
    -    google()
    -    mavenCentral()
    -    // MavenCentral 有 2 小时缓存,若无法集成最新版本请添加此地址
    -    maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }
    -}
    -

    在你的项目 build.gradle.ktsbuild.gradle 中添加依赖。

    Kotlin DSL

    dependencies {
    -    implementation("com.highcapable.yukireflection:api:<yuki-version>")
    -    // ...
    -}
    -

    Groovy DSL

    dependencies {
    -    implementation 'com.highcapable.yukireflection:api:<yuki-version>'
    -    // ...
    -}
    -

    请将 <yuki-version> 修改为 这里 的最新版本。

    特别注意

    如果你的项目目前正在使用 YukiHookAPI在新窗口中打开 的 1.x.x 版本,请不要重复集成 YukiReflection,因为 YukiHookAPI 已经包含了其中的功能且存在针对相关功能的改动,重复集成会造成功能性冲突引发异常,此时你应该前往 YukiHookAPI文档在新窗口中打开 查看对应的使用教程。

    YukiHookAPI 将在 2.x.x 版本完全分离 YukiReflection,届时你可以同时与 YukiHookAPI 使用。

    配置 Java 版本

    在你的项目 build.gradle.ktsbuild.gradle 中修改 Kotlin 的 Java 版本为 11 及以上。

    Kotlin DSL

    android {
    -    compileOptions {
    -        sourceCompatibility = JavaVersion.VERSION_11
    -        targetCompatibility = JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = "11"
    -    }
    -}
    -

    Groovy DSL

    android {
    -    compileOptions {
    -        sourceCompatibility JavaVersion.VERSION_11
    -        targetCompatibility JavaVersion.VERSION_11
    -    }
    -    kotlinOptions {
    -        jvmTarget = '11'
    -    }
    -}
    -
    - - - diff --git a/docs/zh-cn/index.html b/docs/zh-cn/index.html deleted file mode 100644 index b7270c3..0000000 --- a/docs/zh-cn/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - 首页 | Yuki Reflection - - - - -
    Yuki Reflection

    Yuki Reflection

    一个使用 Kotlin 构建的用于 Java 和 Android 平台高效反射 API

    快速上手 更新日志

    轻量优雅

    拥有一套强大、优雅、人性化、完全使用 Kotlin lambda 打造的 API,可以帮你快速实现字节码的查找以及反射功能。

    可跨平台

    不仅仅是 Android 平台,它与 Java API 高度兼容,可使用在任何 Kotlin on JVM 的项目上,有 Java 的地方就可以使用。

    快速上手

    简单易用,不需要繁琐的配置,不需要十足的开发经验,搭建环境集成依赖即可立即开始使用。

    来吧!让反射也变得诗情画意

    public class World {
    -
    -    private void sayHello(String content) {
    -        System.out.println("Hello " + content + "!");
    -    }
    -}
    -
    val newWorld = World()
    -classOf<World>().method {
    -    name = "sayHello"
    -    param(StringClass)
    -    type = UnitType
    -}.get(newWorld).call("YukiReflection")
    -
    - - -