这个JAVA 8 lambda方法是如何工作的?

3

这是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 -> t呢?


4
t -> t is short for (T t) -> { return t; } - Holger
1个回答

4
那个 lambda 表达式等价于下面的匿名类实例:
<T> Function<T, T> identity() {
    return new Function<T, T> () {
        public T apply (T t) {
            return t;
        }
    };
}

Lambda表达式可以帮助你省去指定接口方法名称及其参数类型的繁琐步骤,因为它们只用于实现函数式接口,而函数式接口只能有一个抽象方法。所以,通过声明目标接口类型(在本例中为Function<T, T>),就能明确你要实现哪个方法。
当然,在Java 7中没有静态接口方法,所以你无法将该方法包含在接口中。

但是如果我省略static关键字,那么它将要求我在Function<T, T>对象创建时重新实现identity方法。 - Pradeep Kumar Kushwaha
@PradeepKumarKushwaha 你可以将该方法(静态或非静态)放在某个类中。你不能在Java 7中将带有主体的方法放在接口中。 - Eran
@Eugene 嗯,它有相同的行为。 - Eran
1
在当前的实现中,t -> t 总是会计算出相同的对象。 - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接