如何确定TypeDeclaration是一个类?(TypeDeclaration不能转换为Class)

时间:2018-03-07 20:19:49

标签: java

我想在.java文件中获取所有类名。但我无法确定TypeDeclaration是一个类还是什么。 我尝试使用以下代码片段,我收到错误

    if (type instanceof Class))
    {return packagePrefix + type.getName();}

错误:无法将TypeDeclaration转换为Class

完整代码:

public static String parseClassname(File filename) throws Exception {
    try (FileInputStream fin = new FileInputStream(filename)) {
        CompilationUnit cu = JavaParser.parse(fin);
        String packagePrefix = cu.getPackage().getName().toString();
        if (!packagePrefix.isEmpty()) packagePrefix += ".";

        for (TypeDeclaration type : cu.getTypes())
        {
            if (type instanceof Class)) ////
            {return packagePrefix + type.getName();}      

        }
    }
    return null;
}

2 个答案:

答案 0 :(得分:1)

Class是Java反射API的一部分,用于在运行时表示类型。如果您希望从源代码获得第一个class声明,则应将ClassOrInterfaceDeclaration与Java解析器一起使用,并检查isInterfacefalse

if (!(type instanceof ClassOrInterfaceDeclaration))) {
    continue;
}
ClassOrInterfaceDeclaration classOrInterface = (ClassOrInterfaceDeclaration)type;
if (!classOrInterface.isInterface()) {
    return packagePrefix + type.getName();
}

答案 1 :(得分:1)

cu.getTypes返回实例TypeDeclaration,这就是您收到错误的原因。我不熟悉该库,但如果我理解JavaDoc正确检查单个实例是ClassOrInterfaceDeclaration的实例应该是要走的路。而不是

if (type instanceof Class))
你可以尝试

if (type instanceof ClassOrInterfaceDeclaration))