是否可以重新创建kotlin.Function接口的行为以具有多个参数?

时间:2018-09-24 22:45:57

标签: generics kotlin

当我们要使用界面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 :(得分:2)

他们不是动态地做,只是每个数字都有一个单独的功能。

您无法达到类或接口的动态参数计数行为。您可以传递varargs,但这不是您想要的。但是,您可以尝试使用代码生成,使用intellij想法或注释处理来达到非常相似的效果。