這是爲什麼呢?爲什麼內部類是TreeMap.Entry <K,V>通用?
static final class Entry<K,V> implements Map.Entry<K,V>
爲什麼不只是做這樣的:
static final class Entry implements Map.Entry<K,V>
這是爲什麼呢?爲什麼內部類是TreeMap.Entry <K,V>通用?
static final class Entry<K,V> implements Map.Entry<K,V>
爲什麼不只是做這樣的:
static final class Entry implements Map.Entry<K,V>
但入門級已經知道了K型和從頂部類TreeMap的訴它仍然會安全地輸入。它看起來像入門知道TreeMap的K和V,但創建自己的參數類型
由於事實上它不:
public class Main<T> {
static final class Entry {
T t; // ERROR: Cannot make a static reference to the non-static type T
void f(T t) {} // ERROR: Cannot make a static reference to the non-static type T
}
}
在另一方面,下面的編譯沒有錯誤:
public class Main<T> {
static final class Entry<T> {
T t;
void f(T t) {}
}
}
因爲它是靜態的,所以自然。它沒有具體的'Main'實例來指代。 – 2013-03-18 12:03:56
static final class Entry implements Map.Entry<K,V>
這不是在Java中有效的語句輸入接口,參數化,並有來自周圍的元素參數化類型的自動推理的支持。隨着鑽石運營商的推出,Java 7在這個方向邁出了正確的一步。但是,我們需要等到JLS將其定義爲從接口本身推斷類型。
提供類型安全?如果不是,你不得不施放,並且失去編譯時類型安全性? – 2013-03-18 11:53:29
那麼,你爲什麼不用自己的'Entry'子類來使用後一種方式,並且看看它是怎麼回事......因爲這是一個好的答案需要做的。 – hyde 2013-03-18 11:54:23
但是Entry類已經知道頂級TreeMap中的類型K和V.它仍然會安全地輸入。它看起來像Entry知道TreeMap K和V,但創建自己的參數類型 – midas 2013-03-18 11:57:19