相关疑难解决方法(0)

什么是lambda(函数)?

对于没有comp-sci背景的人来说,计算机科学领域的lambda是什么?

language-agnostic theory lambda computer-science terminology

714
推荐指数
14
解决办法
26万
查看次数

具有非SAM接口的lambda的Java习惯用法

在Java中,使用lambda而不是匿名类可以优雅地实现具有单个抽象方法(即SAM类型或功能接口)的接口:

    // SAM ActionListener with anonymous implementation
    button.addActionListener(
        new ActionListener(){
            public void actionPerformed(Event e){
                System.out.println("button via anon!");
            }
        }
    );
Run Code Online (Sandbox Code Playgroud)

可以替换为:

    // SAM ActionListener with lambda implementation
    button.addActionListener(
        e -> System.out.println("button via lambda!")
    );
Run Code Online (Sandbox Code Playgroud)

但对于具有多个抽象方法的接口,无法直接应用lambda.例如,java.awt.event.WindowListener有七种方法.但通常一块代码只对定义这七种方法中的一种感兴趣.

要使用匿名类覆盖来实现该行为,我们可以:

    // non-SAM with adapter implementation with override
    window.addWindowListener(
        new WindowAdapter() {
            @Override
            public void windowOpened(Event e){
                System.out.println("WindowAdapter opened via override!");
            }
        }
    );
Run Code Online (Sandbox Code Playgroud)

但是有一个更优雅的方式与lambdas?

@FunctionalInterface
public interface ActionListener {
    void actionPerformed(Event e);
}

public interface WindowListener {
    void windowOpened(Event e);

    void windowClosing(Event …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

11
推荐指数
2
解决办法
1712
查看次数