在Kotlin中检查ArrayList的类型

时间:2018-11-29 19:11:18

标签: kotlin

Kotlin提供Array.isArrayOf()来检查数组是否为某种类型。

它是这样使用的

db.prepare(query)

这样定义

if(object.isArrayOf<String>())

但仅适用于Array。我需要检查ArrayList。

我想像这样改变签名。

/**
 * 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)

但是class.java.componentType特定于数组

如何检查我拥有的ArrayList类型?

我应该澄清一下,我只关心它是否是3种类型中的一种,所以我不需要完全开放式的检查方式。

3 个答案:

答案 0 :(得分:2)

不能。数组是唯一可以做到这一点的通用类型(因为数组并不是真正意义上的通用,所以Kotlin会将其隐藏)。

您唯一可以做的就是看其内容,但是当然

  1. 不适用于空列表;

  2. 如果列表包含例如String,可以是ArrayList<String>ArrayList<CharSequence>ArrayList<Any>等。

为此:

  

我需要将其定向到适当的Bundle方法中。 bundle.putStringArrayList(),bundle.putIntegerArrayList()等

我相信都不是问题。

答案 1 :(得分:0)

如果列表是一种类型,则可以使用toTypedArray()将列表转换为数组,然后可以使用isArrayOf

检查类型。

但这会效率不高,因为您将列表转换为数组,如果您可以直接猜测或检索列表的第一项,那就更好了。

答案 2 :(得分:0)

如果要检查列表的类型,可以执行以下操作:

when (list.firstOrNull()) {
   is String -> { /*do something*/ }
   is Int -> { /*do another thing*/ }
   else -> { /*do something else*/ }
}

如果您需要使用某种类型的列表,则可以使用:

list.filterInstance</*the type you need*/>()

希望这对您有用。