Kotlin:使用google-guava静态方法作为扩展
是否有可能使用现有的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
可重用的?正如答案中所提出的那样,您应该使用
map
扩展而不是transform
。 要重用Function
s,可以使用这样的扩展:
public fun <T, R> Function<T, R>.asFun(): (T) -> R = { input -> apply(input) };
你不应该把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的建议中发现
- 错误:执行任务':app:javaPreCompileDebug'失败。 > java.io.IOException:无法删除annotationProcessors.json
- 扩展类条件分支超值的Kotlin二级构造函数