【问题标题】:Generic vs Any function in KotlinKotlin 中的通用与任何函数
【发布时间】:2022-01-10 10:49:00
【问题描述】:

有什么区别

inline fun <reified T> T.TAG(): String = T::class.java.simpleName

fun Any.TAG(): String = this::class.java.simpleName

使用泛型和 Any 作为函数参数或扩展函数类名有什么区别吗?

【问题讨论】:

    标签: kotlin generics any


    【解决方案1】:

    有区别。

    inline fun <reified T> T.TAG1(): String = T::class.java.simpleName
    fun Any.TAG2(): String = this::class.java.simpleName
    

    TAG1 将获得 compile-time 类型,因为 T 的类型在编译时确定,TAG2 将获得运行时类型。 this::class 类似于 Java 中的 this.getClass()

    例如:

    val x: Any = "Foo"
    

    x.TAG1() 会给你Any::class.java.simpleNamex.TAG2() 会给你String::class.java.simpleName

    【讨论】:

    • 再举几个例子:listOf&lt;Int&gt;() 将给出ListEmptyListlistOf&lt;Int&gt;(1) 将提供 ListSingletonListlistOf&lt;Int&gt;(1, 2) 将提供 ListArrayList
    • 这是否意味着使用泛型总是比使用 Any 更好?
    • @Jooo21 好吧,这取决于你想要什么,真的。如果您想要编译时类型,那么可以肯定,使用泛型可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2018-07-07
    相关资源
    最近更新 更多