【发布时间】:2015-12-28 09:23:19
【问题描述】:
我想在单个语句中声明一个完全填充的映射字段,(可能包含多个嵌套语句),如下所示:
private static final Map<Integer,Boolean> map =
something-returning-an-unmodifiable-fully-populated-HashMap;
匿名初始化器不会这样做,原因与调用返回新填充映射的函数不会这样做的原因相同:它们需要两个顶级语句:一个用于变量声明,一个用于方法或初始化器.
双花括号({{ 和 }})习语可以使用,但它创建了一个扩展 HashMap<> 的全新类,我不喜欢它所代表的开销。
Java 8 的 lambdas 是否提供了更好的方法来实现这一点?
【问题讨论】:
-
这有什么理由吗?对于
Map,写Type variable = expression;或Type variable; { variable = expression; }都没有关系。它将创建完全相同的代码。 -
这两个单独的语句在语法上没有绑定在一起,因此它们可能通过复制粘贴或意外在它们之间插入其他内容来分隔。我想把它全部放在一个语句中,因为单个语句给人的感觉很好。
-
即使中间插入了一些语句,也不会破坏或改变语义。对于
final字段,如果有人删除了初始化程序或添加了第二个,编译器会立即大喊大叫。但是,如果您认为这太脆弱了,那么使用方法仍然没有错。然后,调用绑定到变量,当用作初始化器时,方法应该以其创建的名称命名,因此不需要绑定到使用它的变量。 -
@Holger 在所有帐户上都为真。但是假设我们想要一个声明的那种舒适的感觉。
-
好吧,你有一些解决方案。虽然我不确定它们是否会营造出一种舒适的感觉……
标签: java dictionary collections lambda java-8