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