Выдвиньте 2 лямбды с другой подписью в Kotlin - PullRequest
2 голосов
/ 24 мая 2019

В Kotlin мы не можем создать класс, который реализует 2 лямбда-выражения с разными сигнатурами, например:

class Test<T> : (T) -> Unit, () -> T {
    ...
}

, которая выдает следующую ошибку:

Параметр типа «R» функции имеет противоречивые значения: Единица измерения, T

Я понимаю причину, по которой это происходит: все лямбды - это FunctionN интерфейсы, а все FunctionN интерфейсы расширяют некоторый маркерный интерфейс, называемый Function, который не может быть вызван. Но также последняя причина является основной причиной конфликта и ошибки обобщений, упомянутых выше.

Мой вопрос, вероятно, к команде Kotlin: есть ли причина, по которой все FunctionN расширяют Function интерфейс? Может быть, какой-то внутренний / байт-код, который для нас неочевиден, но немного усложняет оптимизацию производительности.

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