Kotlin(十九) 泛型的高级特性
2023-12-16 08:42:04
实化泛型
怎么写才能将泛型实化呢?首先,该函数必须是内联函数才行,也就是要用inline
关键字来修饰该函数。其次,在声明泛型的地方必须加上reified
关键字来表示该泛型要进行实化。示例代码如下:
inline fun <reified T> getGenericType(){
}
上述函数中的泛型T
就是一个被实化的泛型,因为它满足了内联函数和reified
关键字这两个前提条件。那么借助泛型实化,到底可以实现什么样的效果呢?从函数名就可以看出来了,这里我们准备实现一个获取泛型实际类型的功能,代码如下所示:
inline fun <reified T> getGenericType() = T::class.java
虽然只有一行代码,但是这里却实现了一个Java中完全不可能实现的功能:getGenericType()
函数直接返回了当前指定泛型的实际类型。T.class
这样的语法在Java中是不合法的,而在Kotlin中,借助泛型实化功能就可以使用T::class.java
这样的语法了。
现在我们可以使用如下代码对getGenericType()
函数进行测试:
val test1 = getGenericType<String>()
val test2 = getGenericType<Int>()
泛型实化的应用
在我们实现ActivityA-->ActivityB时,我们需要这样写:
val intent= Intent(applicationContext,ExampleActivity::class.java)
startActivity(intent)
这是很常见的一种写法,但是我们如果使用泛型实化来简化它呢?那么我们就可以这样写:
inline fun <reified T> myStartActivity(context: Context) {
val intent = Intent(context, T::class.java)
context.startActivity(intent)
}
那么我们调用:
myStartActivity<ExampleActivity>(applicationContext)
当然,一般我们跳转Activity是需要传参数的,那么我们可以进一步完善我们的方法:
inline fun <reified T> myStartActivity(context: Context, block: Intent.() -> Unit) {
val intent = Intent(context, T::class.java)
intent.block()
context.startActivity(intent)
}
调用:
myStartActivity<ExampleActivity>(applicationContext){
putExtra("param1","value")
putExtra("param2",2)
}
文章来源:https://blog.csdn.net/pengguichu/article/details/135023613
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!