[英]Using Java Generics without a type - Generic erasure?
看看這個方法:
public class Outer<E> {
public static class Inner{
public E value;
public Inner(E value){
this.value = value;
}
}
}
我們將使用此代碼使用它:
Outer.Inner i = new Outer.Inner(5);
System.out.println(i.value);
這個東西不會編譯,因為內部方法中使用了 E。
我的問題是——我知道在編譯時所有泛型都被刪除並被 Object 替換。 那么為什么這里不是這種情況呢? E 將被 Object 替換,這整個東西應該可以編譯。
這是否意味着我們永遠不能使用沒有類型的通用類? (我知道這是不好的做法,但我認為這應該有效)
謝謝。
這與類型擦除無關。 這僅僅是因為您不能在任何靜態聲明中使用類型參數。 正如Java 語言規范所說:
在以下任何情況下引用泛型類 C 的類型參數都是編譯時錯誤:
C 的靜態成員的聲明(§8.3.1.1、§8.4.3.2、§8.5.1)。
嵌套在 C 中的任何類型聲明的靜態成員的聲明。
C 的靜態初始值設定項(§8.7),或
嵌套在 C 中的任何類聲明的靜態初始值設定項。
第一點適用於此。
所以即使這樣也不會編譯:
class Foo<T> {
public static void f(T param) {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.