В Kotlin мы не можем создать класс, который реализует 2 лямбда-выражения с разными сигнатурами, например:
class Test<T> : (T) -> Unit, () -> T {
...
}
, которая выдает следующую ошибку:
Параметр типа «R» функции имеет противоречивые значения: Единица измерения, T
Я понимаю причину, по которой это происходит: все лямбды - это FunctionN
интерфейсы, а все FunctionN
интерфейсы расширяют некоторый маркерный интерфейс, называемый Function
, который не может быть вызван. Но также последняя причина является основной причиной конфликта и ошибки обобщений, упомянутых выше.
Мой вопрос, вероятно, к команде Kotlin: есть ли причина, по которой все FunctionN
расширяют Function
интерфейс? Может быть, какой-то внутренний / байт-код, который для нас неочевиден, но немного усложняет оптимизацию производительности.