我目前通過HORSTMANN(我推薦它,喜歡簡潔的風格),我讀「Java核心的不耐煩」有了解的關於在練習一個麻煩收集API。這次演習是如下:使用接口,而不是具體的數據結構在Java集合API
我鼓勵你使用接口,而不是具體的數據結構,例如,
Map
而不是TreeMap
。不幸的是,這個建議僅僅到目前爲止。爲什麼不能 您使用Map<String, Set<Integer>>
來表示目錄? (提示:你會如何初始化它?)你可以使用什麼類型?
雖然這些接口用於變量聲明,但下面的代碼編譯和工作時沒有問題。我錯過了什麼?
Map<String, Set<Integer>> toc = new HashMap<>();
toc.put("element1", IntStream.of(1, 2, 3).boxed().collect(Collectors.toSet()));
toc.put("element2", IntStream.of (3, 4, 7).boxed().collect(Collectors.toSet()));
toc.forEach((k, v) -> {
System.out.print(k + " ");
v.forEach(val -> System.out.print(val + " "));
System.out.println();
});
}
使用接口類型的變量來保存引用亞型是不是新的,但它是不可能的話題。從一開始它就是Java的一個特色,所以本書的年代並不是問題。 –
@ElliottFrisch我困惑過,因爲你可以。要回答在報價的問題,你會用它'新TreeMap的初始化<字符串,請設置>()'(或'新TreeMap的<>()'如果Java的7 +),創造的價值使用'新TreeSet中()'(或'new TreeSet <>()')。我想說Horstmann是錯誤的,但沒有完整的背景下他可能意味着別的東西。 –
Andreas
我想從書的問題是試圖讓你可以聲明一個變量是一個接口類型的地步,但你不能實例化一個接口:你必須實例實現該接口的類。 – alphaloop