我需要獲得(作爲字符串)某些Java類型的類型簽名。獲取作爲字符串的Java類型的簽名
例如,這是某些ParameterizedType的類型簽名:
Lorg/mapackage/MyClass<Ljava/lang/String;>;
我需要這在應用程序的上下文中被用Javassist顯影。
爲了更好地解釋我正在尋找的內容,我展示了使用Javassist爲私有字段生成getter方法的方法createGetter
的摘錄。字段的類型是參數化類型(即,它使用泛型)。
的createGetter
方法接收字段的類型作爲第一參數,所述第二參數是所述字段的名稱,並且第三個是其中應添加的方法的類:
public CtMethod createGetter(Type propertyType, String propertyName, CtClass ctDeclaringClass) {
CtMethod ctGetterMethod = ...
if(propertyType instanceof ParameterizedType //parameterized "single" type
|| propertyType instanceof GenericArrayType) { //parameterized array
String signature = asGenericSignature(propertyType); //MISSING PIECE OF THE PUZZLE !
ctGetterMethod.setGenericSignature(signature);
}
return ctGetterMethod;
}
例如如果我有一個類
public class TestClass{
private MyClass<String> myField;
}
然後調用createGetter
法領域myField
後,類變爲:
public class TestClass{
private MyClass<String> myField;
public MyClass<String> getMyField() {
return MyClass<String> myField;
}
}
生成的getter方法的返回類型應該與字段具有相同的通用簽名(由於編譯器只有相同的類很好,因此代碼可以在不具有相同字段的通用簽名的情況下進行編譯。我需要它具有相同類型的通用簽名的原因不在這裏解釋)。
createGetter
方法的代碼說明了使用Javassist,爲了設置方法的泛型類型簽名,我需要首先獲得這樣的類型簽名作爲String(如果有別的方法,請別人告訴我) 。 我知道getter方法應該具有的確切參數化類型,因爲它與字段完全相同。但是我有這樣的類型,例如ParameterizedType。
我的問題是:如何獲得這些類型簽名作爲字符串(包括類型參數數據)給定任何Java Type?。
感謝您的任何幫助。