操作数堆栈上的错误类型...使用jdk 8,具有匿名内部类的lambdas失败,为什么?
运行以下代码会导致出现错误消息 。Bad type on operand stack
public static void main(String args[]) {
        TransformService transformService = (inputs) -> {
            return new ArrayList<String>(3) {{
                add("one");
                add("two");
                add("three");
            }};
        };
        Collection<Integer> inputs = new HashSet<Integer>(2) {{
            add(5);
            add(7);
        }};
        Collection<String> results = transformService.transform(inputs);
        System.out.println(results.size());
    }
    public interface TransformService {
        Collection<String> transform(Collection<Integer> inputs);
    }
但是,在 lamda 中删除双大括号初始化(匿名内部类)允许代码按预期运行,为什么?以下工作原理:
public class SecondLambda {
    public static void main(String args[]) {
        TransformService transformService = (inputs) -> {
            Collection<String> results = new ArrayList<String>(3);
            results.add("one");
            results.add("two");
            results.add("three");
            return results;
        };
        Collection<Integer> inputs = new HashSet<Integer>(2) {{
            add(5);
            add(7);
        }};
        Collection<String> results = transformService.transform(inputs);
        System.out.println(results.size());
    }
    public interface TransformService {
        Collection<String> transform(Collection<Integer> inputs);
    }
}
编译器错误 ?毕竟这是抢先体验版...
(除非您有最新的 jdk 8 lambda 下载,否则此操作不会编译。