是否可以对可能未初始化的变量进行检查?

时间:2009-04-02 01:45:40

标签: java variables initialization

我正在研究一种递归方法......

public BinaryTree<T> TreeMirror ( BinaryTree<T> tree ) {
   BinaryTree mirror = new BinaryTree();
   mirror = clone(tree);
   ...
   TreeMirror(...)
   ...
} 

我不希望该方法在每个递归步骤中使mirror引用不同的BinaryTree对象,也不希望在第一次迭代后重复mirror = clone(tree)语句。我想知道是否可以进行if语句检查以查看mirror的实例是否已经初始化 - 在这种情况下mirror = new BinaryTree()mirror = clone(tree)语句将是跳过。

如果不将mirror作为参数传递给方法或在类定义中定义它,我认为这是不可能的......但我想确定。

非常感谢任何建议。

--------- EDIT -----------

我不允许更改方法签名,因此我无法在我的实现中传递对象。我可以创建一个镜像树,但只能将原始树修改为镜像,这是我想要避免的。我试图创建一个新的BinaryTree对象,它是传入的原始树的镜像,但实际上无法弄清楚如何以递归方式进行。

4 个答案:

答案 0 :(得分:2)

很少见到像这样的公共递归函数。一个更好的解决方案可能是使用创建对象的公共方法,然后调用一个递归的私有函数,只进行必要的更改。

通常很难让递归函数签名与您希望向客户显示的内容相匹配。

答案 1 :(得分:1)

镜像变量是方法的本地变量,并且在每次调用中始终都是单元化的。

将镜像作为参数传递给方法是一个非常好的选择。

编辑:如果你不能修改方法签名,你可以创建一个私有方法并调用它来执行递归吗?

答案 2 :(得分:0)

“如果不将镜像作为参数传递给方法或在类定义中定义它,我认为这是不可能的......但我想确定。”

正确,这将是一种做你想要的方法,因为镜像不是递归不变量。

另一种方式是你的递归算法只克隆节点,而不是整个子树。

答案 3 :(得分:0)

Uri的答案是最好的....将它重构为私有方法并简单地初始化镜像然后调用私有(recrsive)方法将镜像作为参数传递。