作者 : 壹咪阳光
Java 7已經完成的7大新功能:
1 對集合類的語言支援;
2 自動資源管理;
3 改進的通用實例創建類型推斷;
4 數字字面量下劃線支援;
5 switch中使用string;
6 二進位字面量;
7 簡化可變參數方法調用。
1 對集合類的語言支援;
2 自動資源管理;
3 改進的通用實例創建類型推斷;
4 數字字面量下劃線支援;
5 switch中使用string;
6 二進位字面量;
7 簡化可變參數方法調用。
下面我們來仔細看一下這7大新功能:
1 對集合類的語言支援
Java將包含對創建集合類的第一類語言支援。這意味著集合類的創建可以像Ruby和Perl那樣了。
原本需要這樣:
List<String> list = new ArrayList<String>();
list.add("item");
String item = list.get(0);
Set<String> set = new HashSet<String>();
set.add("item");
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("key", 1);
int value = map.get("key");
1 對集合類的語言支援
Java將包含對創建集合類的第一類語言支援。這意味著集合類的創建可以像Ruby和Perl那樣了。
原本需要這樣:
List<String> list = new ArrayList<String>();
list.add("item");
String item = list.get(0);
Set<String> set = new HashSet<String>();
set.add("item");
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("key", 1);
int value = map.get("key");
現在你可以這樣:
List<String> list = ["item"];
String item = list[0];
Set<String> set = {"item"};
Map<String, Integer> map = {"key" : 1};
int value = map["key"];
List<String> list = ["item"];
String item = list[0];
Set<String> set = {"item"};
Map<String, Integer> map = {"key" : 1};
int value = map["key"];
這些集合是不可變的。
2 自動資源管理
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(可關閉的)介面。
try (BufferedReader br = new BufferedReader(new FileReader(path)) {
return br.readLine();
}
你可以定義關閉多個資源:
try (
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest))
{
// code
}
為了支持這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)介面。
3 增強的對通用實例創建(diamond)的類型推斷
類型推斷是一個特殊的煩惱,下面的代碼:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
類型推斷是一個特殊的煩惱,下面的代碼:
Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
通過類型推斷後變成:
Map<String, List<String>> anagrams = new HashMap<>();
這個<>被叫做diamond(鑽石)運算符,這個運算符從引用的聲明中推斷類型。
Map<String, List<String>> anagrams = new HashMap<>();
這個<>被叫做diamond(鑽石)運算符,這個運算符從引用的聲明中推斷類型。
4 數字字面量下劃線支援
很長的數位可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
int one_million = 1_000_000;
運算時先去除下劃線,如:1_1 * 10 = 110,120 – 1_0 = 110
5 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;
}
以前你在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;
}
6 二進位字面量
由於繼承C語言,Java代碼在傳統上迫使程式師只能使用十進位,八進制或十六進位來表示數(numbers)。
由於很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b首碼創建二進位字面量:
int binary = 0b1001_1001;
現在,你可以使用二進位字面量這種表示方式,並且使用非常簡短的代碼,可將二進位字元轉換為資料類型,如在byte或short。
byte aByte = (byte)0b001;
short aShort = (short)0b010;
7 簡化的可變參數調用
當程式師試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個“非安全操作”的警告。
JDK 7將警告從call轉移到了方法聲明(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。