编辑:如何在编译时使用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
似乎总是空的。
答案 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似乎总是空的。
这可能是因为您的测试总是会失败。即总是假的。或者列表总是空的,因为你没有放任何东西。
我建议您使用调试器逐步完成代码,以便更好地了解您的程序正在执行的操作。