Как я могу проверить тип массива (не универсальный тип) в Kotlin - PullRequest
0 голосов
/ 02 июля 2018

У меня есть такой код 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:

Невозможно проверить экземпляр стертого типа: Array

Я думал, что стирание типов применимо только к универсальным типам, а не к простым, строго типизированным массивам Java. Как правильно проверить тип компонента переданного экземпляра массива?

EDIT

Этот вопрос отличается от вопросов проверки универсального типа, поскольку массивы Java не являются универсальными типами, а обычные проверки типа Kotlin с использованием оператора is вызывают ошибку времени компиляции.

Спасибо!

1 Ответ

0 голосов
/ 02 июля 2018

Правильный способ справиться с этим (начиная с Kotlin 1.2) - использовать функцию isArrayOf:

fun getData(x: Any): String? {
    if (x is Array<*> && x.isArrayOf<String>()) {
        return x[0] as String
    }
    return null
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...