【发布时间】:2020-09-02 06:46:10
【问题描述】:
我正在开发一个基于JavaParser 的Java 应用程序。我不知道如何获取方法体中使用的 Super 关键字 的类名。例如,我需要知道下面代码中的 Super 关键字是指 A 类。
class A {
public void bar(){...}
}
class B extends A {}
class C extends B {
void foo(){
super.bar() // I want to find that the super keyword is referred to Class A.
}
}
我检查了JavaParser提供的这些函数(1、2和3),但没有一个起作用,都返回null。
MethodCallExpr methodCallExpr = ...
Optional<Expression> scope = methodCallExpr.getScope();
SuperExpr superExp = scope.get().asSuperExpr();
1. superExp.findAll(ClassOrInterfaceDeclaration.class); and
2. superExp.getTypeName();
3. superExp.getClassExpr(); //I do not know why this method also returns null
【问题讨论】:
-
expr是MethodCallExpr类型吗?如果是这样,看来您必须使用getScope():expr.getScope().asSuperExpr() -
我实际上做了同样的事情,但没有工作。我更新了问题以显示这一点。
-
super 在您的示例中是指 B 类(这是当前 C 类的超类),而不是 A。
-
假设C类直接继承自A类,没有任何作用,结果依然为null。
标签: java super javaparser