IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin 中处理 Java Class 数组的 3 种方式 -> 正文阅读

[移动开发]Kotlin 中处理 Java Class 数组的 3 种方式

Kotlin 中处理 Java Class<?>... 或者 Class[] 的 3 种方式

场景 1: 变长参数 Class<?>… parameterTypes

Java 代码:

public static Method getMethod(String clsName, String methodName, Class<?>... parameterTypes) 

在 Kotlin 代码中,通过调用上面的 getMethod() 来获取 android.content.pm.PackageParser 中的 public Package parsePackage(File packageFile, int flags)

方式 1: 直接输入 class

这里,直接把 File::class.java, Int::class.java 写到实参中。

val clsName = "android.content.pm.PackageParser"
val parsePackageMethod = getMethod(clsName, "parsePackage",
                File::class.java, Int::class.java)

这里的 File::class 是 kotlin 的类 KClassFile::class.java 表示从 KClass 中取到 Java 的 class,对应于 Java 中的 File.class

方式 2:通过 arrayOf<Class>()

这样来创建 Array<Class>:
val paramClsArray: Array<Class<*>> = arrayOf<Class<*>>(File::class.java, Int::class.java)

注意:这里的 *paramClsArray , 这个星号 * 是展开操作,把 Array<Class> 数组中的每一项展开, *paramClsArray 展开后是 File::class.java, Int::class.java,跟方式 1 的效果相同。

val clsName = "android.content.pm.PackageParser"
val paramClsArray: Array<Class<*>> = arrayOf<Class<*>>(File::class.java, Int::class.java)
val parsePackageMethod = getMethod(clsName, "parsePackage", *paramClsArray)

方式 3: 通过 Array<Class>()

这里用到了 Array<Class<*>>() 的构造方法: public inline constructor(size: Int, init: (Int) -> T)

Array<Class<*>>(2) { it -> it.javaClass }
调用 Array<Class<*>> 的构造方法,其中, 2 是数组大小, { it -> it.javaClass }init 方法,对 Array<Class> 数组中的每一项获取其 java class。

同样需要对数组进行展开: *paramClsArray

val clsName = "android.content.pm.PackageParser"
val paramClsArray: Array<Class<*>> = Array<Class<*>>(2) { it -> it.javaClass }
paramClsArray[0] = File::class.java
paramClsArray[1] = Int::class.java
val parsePackageMethod = getMethod(clsName, "parsePackage", *paramClsArray)

场景 2:Class<?>[] parameterTypes

public static Method getMethod2(String clsName, String methodName, Class<?>[] parameterTypes)

与场景 1 的区别是,场景 1 采用变长参数 Class<?>... parameterTypes,而场景 2 采用数组 Class<?>[] parameterTypes

在此场景中,在 Kotlin 中调用 getMethod2() 不需要对 Array<Class<*>> 进行展开

例如,

val clsName = "android.content.pm.PackageParser"
// paramClsArray 的代码,见场景 1 中的代码
val parsePackageMethod = getMethod2(clsName, "parsePackage", paramClsArray)

注意:这里采用 paramClsArray(没有 * 展开) ,而不是 *paramClsArray

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-22 18:47:44  更:2022-04-22 18:50:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 22:46:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码