Interface AccountService{
    public void createAccount();
}

AccountService accountServiceAnonymous = new AccountService(){
    public void createAccount(){
        Account account = new Account();
        save(account);
    }
};

AccountService accountServiceLambda = () -> {
    Account account = new Account();
    save(account);
}

除了减少代码行数之外,在Java 8中使用lambda表达式还有其他优势吗?

最佳答案

添加到@Bilbo在评论中提到的内容。在Java 1.7中,发布了一个新的JVM Opcode,名为invokedynamic,Java 8 Lambda使用了它。因此,以下代码将导致在编译代码时创建一个匿名类。可能的<ClassName>$1.class,因此,如果您有10个匿名类,那么在最终的jar中还有10个类。

AccountService accountServiceAnonymous = new AccountService(){
    public void createAccount(){
        Account account = new Account();
        save(account);
    }
};

但是Java 8 lambda使用invokedynamic调用lambda,因此,如果您有10个lambda,它将不会导致任何匿名类,从而减小了最终的jar大小。
AccountService accountServiceLambda = () -> {
    Account account = new Account();
    save(account);
}

09-09 17:32