我正在尝试搜索扩展某个接口的IJavaProject中的所有类。这个接口是Generic,我想得到每个实现的当前类型参数。
现在我有代表每个实现的SourceType,但我无法获取此类的当前参数。这是我的课程的一个例子:
public class PersonDaoImpl extends AbstractDao<PersonPk, Person> {
...
}
我的目标是获得两个参数PersonPk和Person。
如果可以将此SourceType转换为类,则最好对其进行管理。
谢谢!
答案 0 :(得分:0)
要获取类型超类(IType sourceType)
的类型参数,请使用
String superSignature = sourceType.getSuperclassTypeSignature();
for (String typeArgument : Signature.getTypeArguments(superSignature))
System.out.println(Signature.getSignatureSimpleName(typeArgument));
实用程序Signature
为org.eclipse.jdt.core.Signature
。
要从其完全限定名称获取下一个IType
,请使用:
IJavaProject project = sourceType.getJavaProject();
IType type = project.findType(qualifiedTypeName);
如果你有一个未解析的类型签名(以Q
开头),那么首先使用它来获取限定名称:
String[] qualifiedNames = sourceType.resolveType(typeSignature);
有关详细信息,请参阅javadoc。
在IDE中,工作区中的类不作为Class
加载到当前JVM(运行IDE)中,因为工作区中文件的每次更改都需要将一个新类加载到JVM中会导致巨大的内存问题,所以即使有些黑客可以做到这一点,也强烈建议不要这样做!现有的表示(Java模型和AST)应该足以满足您的所有处理需求。