※var
var i = 11;只能寫在區域變數且一定要賦非 null 的值
var j = new int[]{1,2,3}; // new int[] 不能省略
可以寫在 lambda 的參數,但 lambda 本來就可以省略,多此一舉
可以寫在迴圈,新舊都可以
不能寫在方法的參數和回傳值
※Optional 增加 1 個方法
.orElseThrowInteger integer = Optional.ofNullable(1).orElseThrow(NullPointerException::new);
如果是 null 就會報 orElseThrow 裡寫的 exception
※List.copyOf
List<Integer> list1 = List.of(1, 2, 3);List<Integer> copyList1 = List.copyOf(list1);
System.out.println(list1 == copyList1); // true
List<Integer> list2 = Stream.of(1, 2, 3).collect(Collectors.toList());
List<Integer> copyList2 = List.copyOf(list2);
System.out.println(list2 == copyList2); // false
※此方法只會複製不可變的,所以如果本來就是不可變的,底層會判斷能不能 instanceof成 AbstractImmutableList,傳回來會不一樣
※copyOf 是淺複製
class Animal {
private int id;
// getter/setter
public Animal(int id) {
this.id = id;
}
}
List<Animal> animals = List.of(new Animal(1), new Animal(2), new Animal(3));
List<Animal> copyAnimals = List.copyOf(animals);
System.out.println(animals == copyAnimals); // true
animals.forEach(a -> System.out.println(a.getId())); // 1 2 3
animals.get(0).setId(3);
animals.forEach(a -> System.out.println(a.getId())); // 3 2 3
copyAnimals.forEach(a -> System.out.println(a.getId())); // 3 2 3
System.out.println(animals == copyAnimals); // true
沒有留言:
張貼留言