如何在 Kotlin 中检查数组类型(不是泛型类型)



我有这样的java代码:

String getData(Object obj)
{
if (obj instanceof String[])
{
String[] arr = (String[]) obj;
if (arr.length > 0)
{
return arr[0];
}
}
return null;
}

我应该如何将这段代码转换为 Kotlin? 我尝试过自动将 Java 转换为 Kotlin,结果是这样的:

fun getData(obj:Any):String {
if (obj is Array<String>)
{
val arr = obj as Array<String>
if (arr.size > 0)
{
return arr[0]
}
}
return null
}

这是我从 kotlin 编译器那里得到的错误:

无法检查擦除类型的实例:数组<字符串>

我认为类型擦除仅适用于泛型类型,而不适用于简单的强类型Java数组。我应该如何正确检查传递的数组实例的组件类型?

编辑

此问题与泛型类型检查问题不同,因为 Java 数组不是泛型类型,通常使用is运算符的 Kotlin 类型检查会导致编译时错误。

谢谢!

处理此问题的正确方法(从 Kotlin 1.2 开始(是使用isArrayOf函数:

fun getData(x: Any): String? {
if (x is Array<*> && x.isArrayOf<String>()) {
return x[0] as String
}
return null
}

最新更新