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);
}