Kotlin中初始化并赋值ArrayList
- 我们想对ArrayList初始化并赋值,可以直接这样写,语法糖为我们做不少工作。
val arr = arrayListOf("Mark", "Tom", "Colin")
- 或者用Kotlin标准库提供的作用域函数(Scope Function)中的apply函数
val arr = arrayListOf<String>().apply {
add("Mark")
add("Tom")
add("Colin")
}
Java中初始化并赋值ArrayList
- 在Java中,对ArrayList初始化赋值并赋值,正常的写法是这么写
ArrayList<String> arr = new ArrayList<>();
arr.add("Mark");
arr.add("Tom");
arr.add("Colin");
- 看起来略写繁琐,在某些场景,比如验证想快速初始化赋值,或者验证算法题的时候,或者自动生成的代码(Arouter在哈希表中塞传递的参数就是这个初始化的),可以这么写。
new java.util.HashMap<String, Integer>(){{put("param0", 11); put("param1", 8); }}
ArrayList<String> arr = new ArrayList<>() {{
add("Mark");
add("Tom");
add("Colin");
}};
- 有两层{},
- 外层大括号的作用是生成了一个匿名内部类,可以对这个新类做一些修改,这里注意此时arr的类型其实是ArrayList的匿名子类了;
- 内层大括号的含义是Java的构造代码块 {}(其执行时机早于构造函数)。通过两者结合使用减少了一些重复代码。
class ExampleClass {
static {
System.out.println("I am a static code block");
}
{
System.out.println("I am a constructor code block");
}
public ExampleClass() {
System.out.println("I am a constructor");
}
}
- 在项目中最好别用两个大括号的方式初始化,可读性很低。