我需要获得(作为字符串)某些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?。
感谢您的任何帮助。