簡體   English   中英

Java泛型類型的擦除?

[英]Java Generics- type erasure?

如果我有一個擴展MySuperClass的子類,並且有以下通用類:

public class GenericClass<M extends MySuperClass>{

    public void aMethod(M m);

}

public class SubClass1 extends MySuperClass{}

然后我做:

SubClass1 sc1 = new SubClass1();

GenericClass<MySuperClass> msc = new GenericClass<MySuperClass>();

msc.aMethod(sc1);

類型擦除是確定參數化類型是否合法的嗎? 我認為編譯器可以查看M extends MySuperClass ,查看並確定其合法性-但我不確定類型擦除是否可以解決此問題?

類型擦除是指在編譯后刪除了通用類型參數和實例化的事實。 編譯器在編譯時檢查類型,然后刪除所有類型參數。

編譯器是一種基於代碼中的通用定義確保類型安全的工具。

類型擦除會在編譯時刪除它們,並且

如果類型參數不受限制,請將通用類型中的所有類型參數替換為其邊界或對象

類型安全是由編譯器確保的。 類型擦除的唯一工作是擦除泛型部分,以使代碼向后兼容在Java中出現泛型之前編寫的遺留代碼。 因此,在刪除操作生效之前,由編譯器確保您的代碼在語法上正確無誤,無論它是否與泛型相關。

當所有類都有效地“原始”(未鍵入類型擦除運行時的產物。

泛型僅在編譯期間存在。 編譯器檢查泛型參數是否在范圍之內,但是編譯后的字節碼沒有類型信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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