【问题标题】:How to differentiate between two methods in MethodCallExpr in a method?如何区分方法中 MethodCallExpr 中的两个方法?
【发布时间】:2018-02-15 14:32:47
【问题描述】:
public class A{
    void methodA(){
        add(1, 2);
        add(1.2, 2.5);
    }

    void add(int a, int b){
        // add two integers
    }

    void add(double a, double b){
        // add two double numbers
    }
}

现在我使用下面的代码来提取方法内部的方法调用

   new VoidVisitorAdapter<Object>() {
        @Override
        public void visit(MethodCallExpr n, Object arg) {
            super.visit(n, arg);

            System.out.println(n.getNameAsString());
        }
    }.visit(JavaParser.parse(code), null);

现在我如何区分这两个方法调用 add(1, 2)add(1.2, 2.5)methodA 中使用MethodCallExpr ?

【问题讨论】:

  • 你不需要。您的实际参数类型将确定确切的方法。这就是method overloading 的全部目的。
  • 我只是想知道如何在另一个方法 @PM77-1 中使用 MethodCallExpr 区分这两个方法调用
  • 那么实际的问题是:如何指定参数类型?对吧?
  • 如何给两种方法不同的签名,以便在从方法调用中提取时识别这两种方法不同? @PM77-1

标签: java javaparser


【解决方案1】:

如果您使用符号解析功能,您可以。配置符号解析后,您只需调用resolveInvokedMethod,您将获得ResolvedMethodDeclaration 的实例。如果您愿意,可以在该对象上调用 getQualifiedSignature() 或检查参数。

要了解如何配置符号解析,请参阅文档。

注意:我是 JavaParser 贡献者

【讨论】:

  • 我只是想知道在使用 MethodCallExpr 的方法调用之后如何知道它是哪个方法?
  • 这就是我试图回答的问题:) 当你得到完整的签名时,你可以很容易地将这两种方法区分开来。或者您可以查看 ResolvedMethodDeclaration 中的参数类型。什么不清楚?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多