考慮這個做作類:如何從參數化類型的方法參數中獲取參數化類型的類?
import java.util.List;
public class Test {
public String chooseRandom(List<String> strings) {
return null;
}
}
當使用反射來檢查這個方法,我怎麼能得到較java.lang.String
(甚至串"java.lang.String"
)的Class
對象的論據chooseRandom
看什麼時候?
我知道Java在編譯時會擦除類型,但它們必須仍然存在,因爲javap
可以正確地打印它們。在運行這個編譯的類結果javap
:
Compiled from "Test.java"
public class Test {
public Test();
public java.lang.String chooseRandom(java.util.List<java.lang.String>);
}
參數化類型java.util.List
(java.lang.String
)絕對可用...我只是不能找出它是什麼。
我已經試過這樣:
Class clazz = [grab the type of chooseRandom's parameter list's first argument];
String typeName = clazz.getName();
TypeVariable[] genericTypes = clazz.getTypeParameters();
if(null != genericTypes && 0 < genericTypes.length)
{
boolean first = true;
typeName += "<";
for(TypeVariable type : genericTypes)
{
if(first) first = false;
else typeName += ",";
typeName += type.getTypeName();
}
typeName = typeName + ">";
}
這給了我一個java.util.List<E>
typeName
。我所希望的是java.util.List<java.lang.String>
。
我讀過SO其他一些問題和答案,其中沒有一個似乎真的來回答這個問題,或者,如果他們這樣做,有沒有與之相關的工作代碼和解釋是...薄。
這讓我的大腦在我需要它的地方。起初,我接受了這個答案,但我會發布我自己的答案,因爲它確實更加充實。 – 2015-02-06 01:15:32