Kotlin 提供了 Array.isArrayOf() 来检查数组是否属于某种类型。
它是这样使用的
if(object.isArrayOf<String>())
Run Code Online (Sandbox Code Playgroud)
并像这样定义
/**
* Checks if array can contain element of type [T].
*/
@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE")
public fun <reified T : Any> Array<*>.isArrayOf(): Boolean =
T::class.java.isAssignableFrom(this::class.java.componentType)
Run Code Online (Sandbox Code Playgroud)
但它仅适用于 Array。我需要检查ArrayList。
我想像这样改变签名。
@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE")
public fun <reified T : Any> ArrayList<*>.isArrayListOf(): Boolean =
T::class.java.isAssignableFrom(this::class.java.componentType)
Run Code Online (Sandbox Code Playgroud)
但 class.java.componentType 特定于 Array
如何检查我拥有的 ArrayList 类型?
我应该澄清一下,我只关心它是否是 3 种类型之一,所以我不需要完全开放式的检查方式。
如果你想检查列表的类型,你可以这样做:
when (list.firstOrNull()) {
is String -> { /*do something*/ }
is Int -> { /*do another thing*/ }
else -> { /*do something else*/ }
}
Run Code Online (Sandbox Code Playgroud)
如果您需要使用某种类型的列表,您可以使用:
list.filterInstance</*the type you need*/>()
Run Code Online (Sandbox Code Playgroud)
希望这对你有用。
你不能。数组是唯一可能实现这一点的泛型类型(因为它们在同一意义上并不是真正的泛型,Kotlin 只是隐藏了它)。
你唯一能做的就是查看它的内容,但是当然
这不适用于空列表;
如果列表包含例如 a String,则它可能是ArrayList<String>, ArrayList<CharSequence>,ArrayList<Any>等。
以此目的:
我需要将其引导到适当的 Bundle 方法中。bundle.putStringArrayList()、bundle.putIntegerArrayList() 等
我相信,两者都不是问题。
| 归档时间: |
|
| 查看次数: |
7022 次 |
| 最近记录: |