Можно ли воссоздать поведение интерфейса kotlin.Function, чтобы иметь несколько параметров? - PullRequest
0 голосов
/ 25 сентября 2018

Когда мы хотим использовать интерфейс kotlin.Function, можно сделать что-то вроде этого:

import kotlin.Function1
import kotlin.Function2
.......................
import kotlin.FunctionN

И тогда мы можем создать FunctionN, например:

val funcN : FunctionN<Type1, Type2, ..., TypeN+1> = {t1, t2, ..., tN -> tN+1}

Например, с N = 2, мы можем сделать функцию такой:

val func2 : Function2<Int, Int, String> = {i1, i2 -> "$i1 + $i2 = ${i1+i2}"}

Это работает для любого числа, поэтому они не написали отдельную функцию для каждого числа, но они как-то делают это динамически, и теперьИнтересно, можно ли повторить такое поведение и создать какой-нибудь интерфейс / класс, который работает аналогичным образом или он специфичен только для Function.

Я пытался искать в Интернете, но ничего не нашел по этому поводу.скорее всего потому что я даже не знаю как это назвать.

Также взглянул на исходный код, но это просто пустой интерфейс:

/**
 * Represents a value of a functional type, such as a lambda, an anonymous function or a function reference.
 *
 * @param R return type of the function.
 */
public interface Function<out R>

Так что я предполагаю, что они делают всю магию где-то еще, и задаюсь вопросом, знает ли кто-нибудь, возможно ли этосделать это, и, возможно, может предоставить некоторую информацию о том, как это сделать.

1 Ответ

0 голосов
/ 25 сентября 2018

Они не делают это динамически, у них просто есть отдельная функция для каждого числа, вот и все.

Вы не можете достичь динамического поведения количества аргументов для ваших классов или интерфейсов.Вы можете передать varargs, но это не то, что вы хотите.Тем не менее, вы можете попытаться достичь чего-то очень похожего, используя генерацию кода, используя идею intellij или обработку аннотаций.

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