easy-algorithm-interview-an.../code-languages/java/双括号初始化.md

1.2 KiB
Raw Blame History

在集合类(List,Map,Set等)的使用时,我们创建一个常量集合或者传递一个常量集合时,一般会这么做:

Set<String> set = new HashSet();
set.add("1");
set.add("2");
...

或者在类中初始化一个常量集合:

privates static final Set<String> set = new HashSet();
static {
    set.add("1");
    set.add("2");
    ...
}

我们可以使用更简单的双括号方法:

Set<String> set = new HashSet() {{
    add("1");
    add("2");
    ...
}}

removeCodeIn(new HashSet<String>() {{
   add("XZ13s");
   add("AB21/X");
   add("YYLEX");
   add("AR5E");
 }});

这两个大括号的含义分别是:
第一个括号创建了一个新的匿名内部类;
第二个括号声明了匿名内部类实例化时运行的实例初始化块。

如果你只是要创建并初始化一个实例而不是创建一个新类,或者创建任何不添加字段属性或重载方法的匿名类时,用双括号语法就很好了。

如果你用的是集合类且该类有构造器参数接受另一个集合生成该集合的实例那么有个更好的更惯用的替代方法。例如List可以用Arrays.asList来初始化

List<String> list = new ArrayList<String>(Arrays.asList("1", "2", "3"));