【发布时间】:2013-06-28 14:07:48
【问题描述】:
我正在尝试一次声明和定义更大的哈希映射。我就是这样做的:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
put(x, y);
put(x, y);
}};
但是,当我尝试在 put 的正文中使用 lambda 表达式时,我遇到了 eclipse 警告/错误。这就是我在 HashMap 中使用 lambda 的方式:
public HashMap<Integer, Callable<String>> opcode_only = new HashMap<Integer, Callable<String>>() {{
put(0, () -> { return "nop"; });
put(1, () -> { return "nothing...."; });
}};
Eclipse 强调了 lambda 的整个部分,之前以逗号开头。 错误信息:
Syntax error on token ",", Name expected
Syntax error on tokens, Expression expected instead
有人知道我做错了什么吗? HashMap 中是否允许通过 lambda 表达式进行初始化?请帮忙。
【问题讨论】:
-
有趣的问题! +1
-
在
javac中编译。您确定为您的项目启用了 Java 8 吗? -
看起来您正在使用版本 8 之前的编译器进行编译
-
我不确定 Eclipse 是否已针对 Java 8 进行了全面更新。另请参阅Efficiency of Java “Double Brace Initialization”。
-
我现在已经检查了这段代码在 Eclipse(4.4.1,一个 1 年前的版本)上完美编译和运行,所以这似乎很可能是一个问题,因为 Eclipse 的早期版本支持Java 8.
标签: java collections lambda hashmap java-8