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

Mic*_*l P 8 java casting kotlin

我有这样的java代码:

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

    return null;
}
Run Code Online (Sandbox Code Playgroud)

我该如何将此代码转换为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
}
Run Code Online (Sandbox Code Playgroud)

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

无法检查已擦除类型的实例:Array <String>

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

编辑

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

谢谢!

yol*_*ole 15

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

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

  • 尼斯.我不知道这个`isArrayOf`函数 (3认同)