我建立使用ASM 4.0依賴搜索工具,我發現,我一直未能解決一個角落案件的一般特徵。我遇到的問題與在下面的代碼中識別MyClass的用法有關。使用ASM找到「隱含的」變量
public void aMethod() {
new ArrayList<? extends MyClass>();
}
ArrayList中的使用可以使用MethodVisitor.visitTypeInst()被識別,但沒有簽名方法是在該範圍內可用於識別在通用類型參數的使用。 MethodVisitor.visitLocalVariable()也不是解決方案,因爲沒有創建本地變量。如果一個局部變量被明確宣佈爲:
public void aMethod() {
ArrayList<? extends MyClass> list = new ArrayList<? extends MyClass>();
}
的MethodVistor.visitLocalVariable()工作正常,因爲它使您能夠通過簽名PARAM泛型類型的信息。只有在隱含情況下,如果沒有本地變量聲明爲,我不能找到一種方法來訪問泛型類型參數。
我假設有某種方式與該代碼的通用信息訪問類的屬性,但我不能確定如何做到這一點。
感謝您的任何幫助!
'new ArrayList <?擴展MyClass>()'是無效的Java語法 – user102008 2012-02-01 22:01:49
我相信它是;他正在指定類型通配符的上限。 [鏈接](http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.5.1) – 2012-04-22 12:59:39