我有一个java函数的以下结构:
public void recursiveFun(Object currentReturnValue, int numRecursiveCalls) {
for(Method currentMethod: currentReturnValue.getClass().getMethods()) {
String methodName = currentMethod.getName();
// base case
if(methodName.equals("getObject")) {
Object retVal = currentMethod.invoke(currentReturnValue, null);
System.out.println(retVal);
return;
}
else {
numRecursiveCalls++;
currentReturnValue = currentMethod.invoke(currentReturnValue, null);
recursiveFun(currentReturnValue, numRecursiveCalls);
boolean previousFrame = true;
}
}
我设置了 2 个断点,一个在基本情况下,第二个在 previousFrame=true。它首先在我的基本情况下停止,然后我继续跨步。我发现它确实回到了前一帧,因为它将 previousFrame 设置为 true,但 currentReturnValue 的类型保持不变!它应该是不同的类型。
例如,Location 类有一个 getIdNum(),它返回一个 MyInteger 类型的对象。MyInteger 有一个返回对象的 getObject() 方法。在我的情况下,return 语句应该从 currentReturnValue 为 MyInteger 的框架中弹出并返回到 currentReturnValue 为 Location 的框架。