如何检查函数是否按值调用?

时间:2014-04-21 19:26:26

标签: java eclipse parsing abstract-syntax-tree eclipse-jdt

编辑:如何在编译时使用eclipse解析器来训练参数的类型?


我正在尝试检查函数是否为called by value。所以我在用户代码上激活以下功能:

public boolean visit(MethodInvocation node){}

我的问题是如何实际检查呼叫是按值还是按引用。我尝试了node的成员函数,如下所示:

typeArguments()
arguments()
getExpression()

并且无法继续下去。比如我试过:

List r_type= node.typeArguments();
if(r_type.toString() == "int")
{
  ....
}

r_type似乎总是空的。

1 个答案:

答案 0 :(得分:1)

  

我想知道如何检测参数类型(int / bool / double / ...)

对于基元,您知道类型,不需要检测它是哪种类型,因为它不是动态的。也就是说,它无法与你在编译时所知道的不同。

然而,对于对象,有许多方法可以检测到这种情况,因为常见的方法是使用instanceof,例如。

 Object o = ...
 if (o instanceof Integer) {

 } else if (o instanceof Boolean) {

 } else if (o insatanceof Double) {

 } else {
     // some error
 }

显示Java已通过值传递引用的一种简单方法是更改​​引用。

public boolean visit(MethodInvocation node){ node = null; }

MethodInvocation node = new MethodInvocation();
visit(node); // does it change to null
System.out.println(node); // no it doesn't. node is unchanged.
  

但是r_type似乎总是空的。

这可能是因为您的测试总是会失败。即总是假的。或者列表总是空的,因为你没有放任何东西。

我建议您使用调试器逐步完成代码,以便更好地了解您的程序正在执行的操作。