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种类型中的一种,所以我不需要完全开放式的检查方式。
答案 0 :(得分:2)
不能。数组是唯一可以做到这一点的通用类型(因为数组并不是真正意义上的通用,所以Kotlin会将其隐藏)。
您唯一可以做的就是看其内容,但是当然
不适用于空列表;
如果列表包含例如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*/>()
希望这对您有用。