Kotlin 中的泛型函数与任意函数

Joo*_*o21 4 generics any kotlin

有什么区别

inline fun <reified T> T.TAG(): String = T::class.java.simpleName
Run Code Online (Sandbox Code Playgroud)

fun Any.TAG(): String = this::class.java.simpleName
Run Code Online (Sandbox Code Playgroud)

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

Swe*_*per 8

它们是有区别的。

inline fun <reified T> T.TAG1(): String = T::class.java.simpleName
fun Any.TAG2(): String = this::class.java.simpleName
Run Code Online (Sandbox Code Playgroud)

TAG1将获得编译时类型,因为 的类型T是在编译时确定的,并且TAG2将获得运行时类型。this::class与Java中的类似this.getClass()

例如:

val x: Any = "Foo"
Run Code Online (Sandbox Code Playgroud)

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

  • 再举几个例子: `listOf&lt;Int&gt;()` 将给出 `List` 和 `EmptyList`。`listOf&lt;Int&gt;(1)` 将给出 `List` 和 `SingletonList`。`listOf&lt;Int&gt;(1, 2)` 将给出 `List` 和 `ArrayList`。 (2认同)