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); 

但是我认为自己宣布扩展是没有必要的。 如何省略这个声明?


更新

我的问题有两个主要的问题:

  1. 是否可以导入现有的(静态)方法作为扩展?

    不,现在不可能。

  2. 如何重用现有的番石榴的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的建议中发现 在这里输入图像描述