我想在.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;
}
答案 0 :(得分:1)
Class
是Java反射API的一部分,用于在运行时表示类型。如果您希望从源代码获得第一个class
声明,则应将ClassOrInterfaceDeclaration
与Java解析器一起使用,并检查isInterface
是false
:
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))