Eclipse JDT Core:如何解析参数化父类方法的泛型返回类型
如何用JDT API解析方法的返回类型
别担心,刚上手JDT API确实容易摸不着头绪,我之前刚接触的时候也在这上面卡过一阵~下面给你两种实用的方法来获取test方法的返回类型,应该能帮到你:
方法一:ASTParser + ASTVisitor 遍历语法树
这是最常用的方式,通过遍历抽象语法树找到目标方法,再提取返回类型:
- 先初始化ASTParser并配置好源码:
ASTParser parser = ASTParser.newParser(AST.JLS18); // 根据你的JDK版本调整 parser.setSource("你的Java源码字符串".toCharArray()); parser.setKind(ASTParser.K_COMPILATION_UNIT); // 配置环境(如果需要处理类路径依赖的话) parser.setEnvironment(new String[]{"你的类路径"}, new String[]{"源码路径"}, null, true); parser.setResolveBindings(true); // 开启绑定解析,才能拿到真实类型信息 CompilationUnit cu = (CompilationUnit) parser.createAST(null);
- 自定义ASTVisitor来捕获方法声明:
cu.accept(new ASTVisitor() { @Override public boolean visit(MethodDeclaration node) { // 找到名为test的方法 if ("test".equals(node.getName().getIdentifier())) { // 获取返回类型节点 Type returnType = node.getReturnType2(); if (returnType != null) { // 解析绑定信息,拿到真实类型 ITypeBinding typeBinding = returnType.resolveBinding(); if (typeBinding != null) { // 获取类型的全限定名,比如java.lang.String String fullTypeName = typeBinding.getQualifiedName(); // 如果是void类型,typeBinding.isVoid()会返回true System.out.println("返回类型:" + fullTypeName); } } return false; // 找到目标方法后停止遍历 } return true; } });
方法二:通过类型绑定直接获取方法返回类型
如果你已经拿到了目标类的ITypeBinding,可以直接遍历它的方法绑定来找到目标方法:
// 假设你已经通过某种方式拿到了类的ITypeBinding ITypeBinding classBinding = ...; for (IMethodBinding methodBinding : classBinding.getDeclaredMethods()) { if ("test".equals(methodBinding.getName())) { ITypeBinding returnTypeBinding = methodBinding.getReturnType(); String returnTypeName = returnTypeBinding.getQualifiedName(); System.out.println("返回类型:" + returnTypeName); break; } }
注意事项
- 一定要开启
setResolveBindings(true),否则resolveBinding()会返回null,拿不到真实的类型信息 - 如果方法返回的是泛型类型(比如
List<String>),可以用typeBinding.getTypeArguments()来获取泛型参数 - 对于
void类型,可以通过typeBinding.isVoid()来判断
内容的提问来源于stack exchange,提问作者Seamus McMorrow
相关产品推荐
相关产品推荐

