【发布时间】:2018-07-27 01:34:11
【问题描述】:
Kotlin 好像不支持获取本地函数等,请看下面的例子:
fun <T> MutableList<T>.filterOnCondition(condition: (T) -> Boolean): MutableList<T>
{
// For the printline, trying to get the function name,
// which in this case is passedAsCondition
println(condition.reflect()!!.instanceParameter!!.name)
}
fun passedAsCondition (number: Int, multipleOf : Int): Boolean
{
return number % multipleOf == 0
}
numbers.filterOnCondition { passedAsCondition(it, 5) }
Kotlin 返回此错误,因为它还没有被映射出来:
“kotlin.reflect.jvm.internal.KotlinReflectionInternalError: 内省局部函数、lambda、匿名函数和局部函数 Kotlin 反射尚不完全支持变量"
但是,这肯定可以通过 Java 实现,不是吗?
【问题讨论】:
-
我可以写
Arrays.asList(5, 6, 10, 13, 15, 24).stream().filter(x -> x % 5 == 0).forEachOrdered(System.out::println);- 不知道你在问什么...关于传递一个函数来过滤? -
我正在尝试获取传递给 filterOnCondition 的函数的名称。对于 println(),我希望看到 passAsCondition 返回。
-
@Lander,您正在反思 lambda。
passedAsCondition在 lambda 主体中。
标签: java android reflection kotlin introspection