Метод рефакторинга, который использует отражение от Java до Kotlin - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь преобразовать метод Java, который проверяет уровень SignalStrength для API Android, который выглядит следующим образом:

public static int getSignalLevel(final SignalStrength signal) {
try {
    final Method m = SignalStrength.class.getDeclaredMethod("getLevel", (Class[]) null);
    m.setAccessible(true);
    return (Integer) m.invoke(signal, (Object[]) null);
} catch (Exception e) {
    Log.debug(TAG, "Google hates developers", e);
    return 0;
  }
}

При преобразовании в Kotlin я получаю это (я стремлюсь сделать расширение Kotlin):

fun SignalStrength.getSignalLevel(): Int {
return try {
val m = SignalStrength::class.java.getDeclaredMethod("getLevel", *null as Array<Class<*>>?)
m.isAccessible = true
m.invoke(this, *null as Array<Any>?) as Int
} catch (e: Exception) {
0
}

}

Проблема для:

*null as Array<Class<*>>?

Оператор распространения (* foo) нельзя применять к аргументу типа Nullable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...