java – 如何重构执行类似操作的if-else主体?
发布时间:2020-12-15 04:36:57 所属栏目:Java 来源:网络整理
导读:我不得不在 java中为二进制树的节点编写一个类,而不仅仅是方法存在if-else语句的主体几乎完全相同的问题.例如: public void insert(int val) { if(val key) if(left == null) left = new TreeNode(val,this); else left.insert(val); else if(right == null
我不得不在
java中为二进制树的节点编写一个类,而不仅仅是方法存在if-else语句的主体几乎完全相同的问题.例如:
public void insert(int val) { if(val < key) if(left == null) left = new TreeNode(val,this); else left.insert(val); else if(right == null) right = new TreeNode(val,this); else right.insert(val); } 这里重复代码,我想找到一种避免代码重复的方法. 要想象它,风格中的东西: public void insert(int val) { TreeNode direction = right; if(val < key) direction = left; if(direction == null) !! direction = new TreeNode(val,this); !! else direction.insert(val); } 哪里有领先和尾随!!因为引用语义在java中的工作方式不起作用.如前所述,在C中,我只是在左侧或右侧引用上创建一个引用并对其进行处理. 有没有办法在不使用重复代码的情况下在java中编写此代码? 解决方法
我创建了一个可重用的私有方法来隔离重复的逻辑:
private TreeNode handleNode(TreeNode node,int val) { if(node == null) node = new TreeNode(val,this); else node.insert(val); return node; } 然后 public void insert(int val) { if(val < key) left = handleNode(left,val); else right = handleNode(right,val); } 正如你所说,这个特定的例子是相当小的,但是这种模式在这里也是有用的,当然,当被隔离/分解的逻辑更复杂时. 如果您担心方法调用的开销,请不要这样做.方法调用确实非常便宜. :-)如果这是代码中的一个热点,那么现代JVM(如Oracle)会识别出这个并且内联方法调用,如果这样做有利的话. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |