Java 7已經完成的七大新功能預覽
原創51CTO推薦專題:Java 7 下一代Java開發技術詳解
#t#【51CTO快譯】最近的Devoxx大會上,Java 7將包含閉包的消息令很多人感到振奮——這將做為一個獨立的JSR被實現。在眾多Java 7新的語言特性中,有一些現在已經完成了。Devoxx大會的一位參會者在博客中報告了下面這些Java 7已經完成的7大新功能:
1)對集合類的語言支持;
2)自動資源管理;
3)改進的通用實例創建類型推斷;
4)數字字面量下劃線支持;
5)switch中使用string;
6)二進制字面量;
7)簡化可變參數方法調用。
51CTO編輯推薦:Java 7特別專題
下面我們來仔細看一下這7大新功能:
對集合類的語言支持
Java將包含對創建集合類的第一類語言支持。這意味著集合類的創建可以像Ruby和Perl那樣了。
原本需要這樣:
- List
list = new ArrayList(); - list.add("item");
- String item = list.get(0);
- Set
set = new HashSet(); - set.add("item");
- Map
map = new HashMap(); - map.put("key", 1);
- int value = map.get("key");
現在你可以這樣:
- List
list = [ "item"];- String item = list[0];
- Set
set = { "item"};- Map
map = { "key" : 1};- int value = map["key"];
這些集合是不可變的。
自動資源管理
Java中某些資源是需要手動關閉的,如InputStream,Writes,Sockets,Sql classes等。這個新的語言特性允許try語句本身申請更多的資源,這些資源作用于try代碼塊,并自動關閉。
這個:
- BufferedReader br = new BufferedReader(new FileReader(path));
- try {
- return br.readLine();
- } finally {
- br.close();
- }
變成了這個:
- try (BufferedReader br = new BufferedReader(new FileReader(path)) {
- return br.readLine();
- }
你可以定義關閉多個資源:
- try (
- InputStream in = new FileInputStream(src);
- OutputStream out = new FileOutputStream(dest))
- {
- // code
- }
為了支持這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)接口。
增強的對通用實例創建(diamond)的類型推斷
類型推斷是一個特殊的煩惱,下面的代碼:
- Map
> anagrams = new HashMap>();
通過類型推斷后變成:
- Map
> anagrams = new HashMap<>();
這個<>被叫做diamond(鉆石)運算符,這個運算符從引用的聲明中推斷類型。
數字字面量下劃線支持
很長的數字可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
- int one_million = 1_000_000;
switch中使用string
以前你在switch中只能使用number或enum。現在你可以使用string了:
- String s = ...
- switch(s) {
- case "quux":
- processQuux(s);
- // fall-through
- case "foo":
- case "bar":
- processFooOrBar(s);
- break;
- case "baz":
- processBaz(s);
- // fall-through
- default:
- processDefault(s);
- break;
- }
二進制字面量
由于繼承C語言,Java代碼在傳統上迫使程序員只能使用十進制,八進制或十六進制來表示數(numbers)。
由于很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b前綴創建二進制字面量:
- int binary = 0b1001_1001;
簡化的可變參數調用
當程序員試圖使用一個不可具體化的可變參數并調用一個*varargs* (可變)方法時,編輯器會生成一個“非安全操作”的警告。JDK 7將警告從call轉移到了方法聲明(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。