簡體   English   中英

使用沒有類型的 Java 泛型 - 泛型擦除?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM