Java10 新特性
var關鍵字
局部變量的類型推斷 var關鍵字:這個新功能将為Java增加一些文法糖 - 簡化它并改善開發者體驗。新的文法将減少與編寫Java相關的冗長度,同時保持對靜态類型安全性的承諾。
使用場景
- 局部變量初始化
- for循環内部索引變量
- 傳統的for循環聲明變量
使用限制
- 方法參數
- 全局變量
- 構造函數參數
- 方法傳回類型
- 字段
- 捕獲表達式(或任何其他類型的變量聲明)
/**
* 輸出:
* [hello,world!, 1, 1.01]
*/
public static void varKeyWord() {
// 這裡最好帶上泛型,否則list就什麼都可以裝了
var list = new ArrayList<>();
list.add("hello,world!");
list.add(1);
list.add(1.01);
System.out.println(list);
}
新增ByteArrayOutputStream
String toString(Charset): 重載 toString(),通過使用指定的字元集解碼位元組,将緩沖區的内容轉換為字元串。
List、Map、Set新增API
/**
* 按照其疊代順序傳回一個不可修改的清單、映射或包含給定集合的元素的集合。
*/
public static void collectionNewAPI() {
var list = new ArrayList<String>();
list.add("hello");
list.add("world");
// copyOf傳回的集合為不可變,不能增删元素
var newCopyList = List.copyOf(list);
// 這裡add方法會抛出異常:java.lang.UnsupportedOperationException
// newCopyList.add("zdk");
System.out.println(newCopyList);
}
Properties新增API
/**
* 新增int入參的構造方法和重載的replace方法
*/
public static void propertiesNewAPI() {
// 新增int參數的構造函數,初始化大小,預設為8
var properties = new Properties(8);
properties.setProperty("host", "localhost");
// 隻有目前值為localhost時才會替換,替換成功傳回true
properties.replace("host", "localhost", "baidu.com");
System.out.println(properties);
}
Collectors收集器新增API
- toUnmodifiableList():
- toUnmodifiableSet():
- toUnmodifiableMap(Function, Function):
-
toUnmodifiableMap(Function, Function, BinaryOperator):
這四個新方法都傳回 Collectors ,将輸入元素聚集到适當的不可修改的集合中。
/**
* 輸出:
* [hello, world]
*/
public static void collectorsNewAPI() {
var list = new ArrayList<String>();
list.add("hello");
list.add("world");
var unmodifiableList = list.stream().collect(Collectors.toUnmodifiableList());
// 不可修改的list,這裡add/remove操作不會抛出異常,但add/remove不會生效
unmodifiableList.add("hello2");
System.out.println(unmodifiableList);
}