Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不同类中的递归方法之间隐藏状态参数_Java_Oop_Design Patterns_Recursion - Fatal编程技术网

Java 在不同类中的递归方法之间隐藏状态参数

Java 在不同类中的递归方法之间隐藏状态参数,java,oop,design-patterns,recursion,Java,Oop,Design Patterns,Recursion,我在类a中有一个方法doA,它调用类B中的方法doB,它再次调用doA。映射作为参数在每次调用中传递,在doB中会发生变化。 所有递归调用都需要该映射,但这是特定实现状态的一部分,尽管我实际上希望类a与该状态无关,因为其他实现不需要它,当然我不想将完全相同的问题转移到其他地方 class A { public void doA(Map state) { b.doB(state) } } class B { public void doB(Map state

我在类a中有一个方法doA,它调用类B中的方法doB,它再次调用doA。映射作为参数在每次调用中传递,在doB中会发生变化。 所有递归调用都需要该映射,但这是特定实现状态的一部分,尽管我实际上希望类a与该状态无关,因为其他实现不需要它,当然我不想将完全相同的问题转移到其他地方

class A {
    public void doA(Map state)  {
      b.doB(state)
    }
}

class B {
    public void doB(Map state) {
      if (someCondition) {
         a.doA(processState(state))
      }
    }

}

我能想到的唯一方法是创建一个临时映射,并在满足条件时复制所有元素,并在使用后取消引用临时映射,以便垃圾收集器能够处理它。

您能详细说明什么是保留引用吗?我更改了描述,因为引用的东西不是真的很重要。重要的是,在所有通话中都需要保留状态,我不想让A知道任何关于该状态的信息。如果我理解正确的话。无论B在映射状态上做什么,都不应该反映在A中。理想情况下,B应该创建参数状态的副本,并在这种情况下对其进行操作。而不是直接作用于参数引用,这也会影响。