这里着重介绍一下双括号初始化(double brace initialization)技巧
假设我们想构造一个数组列表,并将它传给某个方法:
ArrayList<String> friends = new ArrayList<>();
friends.add("Harry");
friends.add("Tony");
invite(friends);
若这个friends数组之后不会再使用的话,我们可以把它构造成一个匿名列表:
invite(new ArrayList<String>(){{add("Harry");add("Tony");}});
这里的两层括号,外层括号建立了一个 ArrayList的匿名子类。内层括号定义了一个该匿名子类的构造块(构造对象时会自动执行的代码块)。
由于匿名内部类的访问特性与局部内部类相同,所以仅仅做了这一个小小的改动不仅保护了数据(如果不是这样做的话,可以用一些特殊方法,得到声明的friends列表)还精简了代码,何乐而不为呢。 |
|