簡體   English   中英

java編譯器如何知道jar中代碼的泛型類型信息?

[英]How does java compiler know of generics type information of a code in jar?

我有一個重新排序java泛型的問題。 據我所知,通用信息僅在編譯時可用,通過稱為“類型擦除”的過程,一旦代碼被編譯並制作了.class文件,所有TYPE信息都將消失。

就是說,一旦編譯了.java文件,即使該列表被聲明為.java文件中的字符串列表,.class文件字節碼也具有List myList = new arrayList()。

話雖如此,請考慮以下情況。

我有一個帶有簽名方法的jar

public void check(List<String> p)

當我從另一個代碼中調用此方法時,編譯器會強制執行check方法的參數僅應為List<String> ,而不能為其他任何參數。

現在,由於jar方法(.class文件)中存在check方法,如果在制作.class文件時TYPE信息已被刪除,則編譯器如何知道List<String>所需的TYPE信息?

類型擦除不會刪除與泛型相關的所有信息。 簡而言之,將完整保留有關方法的簽名( public void check(List<String> p) )。 保留的信息可以在運行時使用反射API獲得(如getGenericParameterTypes()getTypeParameters()和其他方法)。

暫無
暫無

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

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