以下是使用lambda在Java 8中实现字段初始化器的方法:
private static final Map<Integer,Boolean> map =
((Supplier<Map<Integer,Boolean>>)() -> {
Map<Integer,Boolean> mutableMap = new HashMap<>();
mutableMap.put( 1, false );
mutableMap.put( 2, true );
return Collections.unmodifiableMap( mutableMap );
}).get();
Java 9 解决方案:
private static final Map<Integer,Boolean> map = Map.of( 1, false, 2, true )
如果您有超过10个条目,Map.of()
将无法工作,因此您需要使用以下代码:
private static final Map<Integer,Boolean> map = Map.ofEntries(
Map.entry( 1, false ),
Map.entry( 2, true ),
Map.entry( 3, false ),
Map.entry( 4, true ),
Map.entry( 5, false ),
Map.entry( 6, true ),
Map.entry( 7, false ),
Map.entry( 8, true ),
Map.entry( 9, false ),
Map.entry( 10, true ),
Map.entry( 11, false ) );
Map
来说,无论你写Type variable = expression;
或者Type variable; { variable = expression; }
,它都会创建完全相同的代码。 - Holgerfinal
字段,如果有人删除了初始化程序或添加了第二个,编译器将立即报错。但是,如果您认为这太脆弱,仍然可以使用方法。然后,在用作初始化程序时,调用与变量绑定,而方法应命名为其创建的内容,因此不需要绑定到使用它的变量。 - Holger