Kotlin:使用google-guava静态方法作为扩展

时间:2014-12-10 20:54:58

标签: guava kotlin

是否可以使用现有的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 Iterable s?

    而不是transform,您应该使用map扩展名,如答案中所建议的那样。要重用Function,可以使用以下扩展名:

  3. public fun <T, R> Function<T, R>.asFun(): (T) -> R
        = { input -> apply(input) };
    

1 个答案:

答案 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的建议中轻松发现所有其他内容 enter image description here