Eclipse:SourceType to Class(或获取Class的当前参数)

时间:2015-07-23 06:55:33

标签: java eclipse eclipse-jdt

我正在尝试搜索扩展某个接口的IJavaProject中的所有类。这个接口是Generic,我想得到每个实现的当前类型参数。

现在我有代表每个实现的SourceType,但我无法获取此类的当前参数。这是我的课程的一个例子:

public class PersonDaoImpl extends AbstractDao<PersonPk, Person> {
    ...
}

我的目标是获得两个参数PersonPk和Person。

如果可以将此SourceType转换为类,则最好对其进行管理。

谢谢!

1 个答案:

答案 0 :(得分:0)

要获取类型超类(IType sourceType)的类型参数,请使用

String superSignature = sourceType.getSuperclassTypeSignature();
for (String typeArgument : Signature.getTypeArguments(superSignature))
    System.out.println(Signature.getSignatureSimpleName(typeArgument));

实用程序Signatureorg.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)应该足以满足您的所有处理需求。