是否可以使用现有的java静态方法作为框中的扩展名?
让我们考虑com.google.common.collect.Iterables.transform
。现在,因为我不知道如何处理这个问题,使用提出的方法作为扩展,我必须写一些类似的东西:
import com.google.common.collect.Iterables.transform
public fun <F, T> Iterable<F>.transform(function: Function<in F, out T>) : Iterable<T> {
return transform(this, function);
}
所以,在此之后我可以将它与iterables一起使用:
Iterable<A> input;
Function<A, B> function;
Iterable<B> output = input.transform(function);
但我认为自己宣布扩展是不必要的。如何省略此声明?
更新
我的问题有两个主要的问题:
是否可以将现有(静态)方法导入为扩展名?
不,现在不可能。
如何重用现有的番石榴Function
,例如到transform
Iterable
s?
而不是transform
,您应该使用map
扩展名,如答案中所建议的那样。要重用Function
,可以使用以下扩展名:
public fun <T, R> Function<T, R>.asFun(): (T) -> R
= { input -> apply(input) };
答案 0 :(得分:4)
你不应该将Guava的Java变通方法带入Kotlin。这样的API已经是Kotlin运行时的一部分。所以你可以写:
val input = listOf(1,2,4,8)
val output = input.map { /*transform function*/ it + 1 }
http://kotlinlang.org/api/latest/jvm/stdlib/kotlin/map.html
您可以在IDE的建议中轻松发现所有其他内容