【问题标题】:How does this JAVA 8 lambda method work?这个 JAVA 8 lambda 方法是如何工作的?
【发布时间】:2018-03-22 07:17:45
【问题描述】:

这是 Java 8 lambda 方法,它的 JAVA 7 等效项是什么?

public interface Function<T, R> {

    static <T> Function<T, T> identity() {
        return t -> t;
    }

    R apply(T t);
}

所以它只是一个 JAVA 接口,但是t -&gt; t 是如何使用的?

【问题讨论】:

  • t -&gt; t 是 (T t) -&gt; { return t; } 的缩写

标签: lambda interface java-8


【解决方案1】:

该 lambda 表达式等价于以下匿名类实例:

<T> Function<T, T> identity() {
    return new Function<T, T> () {
        public T apply (T t) {
            return t;
        }
    };
}

lambda 表达式使您无需指定您正在实现的接口方法的名称及其参数类型,因为它们仅用于实现函数式接口,它可以只有一个抽象方法,因此通过声明目标接口类型(本例中为Function&lt;T, T&gt;),很清楚您正在实现哪种方法。

当然,Java 7 没有静态接口方法,因此您无法在接口中包含该方法。

【讨论】:

  • 但是如果我省略 static 那么它会要求我在 Function 的对象创建中再次实现标识方法
  • @PradeepKumarKushwaha 您可以将该方法(静态或非静态)放在某个类中。在 Java 7 中,您不能将带有主体的方法放在接口中。
  • @Eugene 好吧,它具有相同的行为。
  • 好吧,t -&gt; t 在当前实现中总是计算为同一个对象。
猜你喜欢
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多