java - 如何将这两个功能合并在一起?

标签 java

public boolean insert(K key, V value) {
    if (contains(key)) { //if the binary tree contains it don't insert it.
        return false;
    }
    if (rNode == null) { //if the root node is empty, there is nothing in the tree
        //create a new DictionaryNode.
        rNode = new DictionaryNode<K, V>(key, value);
        curNode = rNode;
    } else {//if the above aren't true then you can insert it.
        placeNode(key, value, rNode, null, false); //use private method placeNode
    }
    changeCounter++;
    currentSize++;
    return true;
}//end insert

这是另一个函数。我希望能够完成 placeNode 在我的插入方法中所做的所有操作。我希望能够摆脱我的 placeNode 方法。

private void placeNode(K key, V value, DictionaryNode<K, V> node, DictionaryNode<K, V> parent, boolean nodeLeft) {
    if (node == null) {
        if (nodeLeft) {
            parent.lChild = new DictionaryNode<K, V>(key, value);
        } else {
            parent.rChild = new DictionaryNode<K, V>(key, value);
        }
    } else if (((Comparable<K>) key).compareTo(node.key) < 0) {
        placeNode(key, value, node.lChild, node, true);
    } else {
        placeNode(key, value, node.rChild, node, false);
    }
}//end placeNode

最佳答案

除了将这两个函数合并在一起而令人头疼之外,没有任何好处。它们执行不同操作,因此,应尽可能将其分成更小的代码块。

方法的拆分很好。不要尝试合并它们。

您唯一能做的就是用您想要删除的方法的确切主体替换您的方法调用...但这会使事情变得极其复杂。

顺便说一句,你的 Actor 阵容 ((Comparable<K>) key可以产生 ClassCastException 。如果类型绑定(bind)到K不具有可比性,那么在运行时,你就会遇到一个大问题。泛型不应该以这种方式使用 - 您希望提供类型的编译时安全性。

幸运的是,您可以通过向类中的类型添加上限来解决此问题:

public class DictionaryNode<K extends Comparable<K>, V> {
    // implementation to follow
}

关于java - 如何将这两个功能合并在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20485104/

相关文章:

java - WS 安全错误 : 181001 while trying to access to a web service through Apache CXF

java.util.concurrent.ExecutionException : org. apache.catalina.LifecycleException 异常

java - Java中从字符串中获取子字符串(Android)

java - 如何要求用户输入控制台(BufferedReader)并显示倒计时?需要在两个线程中完成

java - Spring MVC Rest中处理JSon时如何处理POJO嵌套对象

java - 这些盐腌方法有什么区别

java - Android - Green Dao 多重交易

Java JDBC resultSet.下期

Java while循环打印平方数不能使用int?

java - 使用工具栏向上箭头导航会重新启动应用程序,但 Android 内置箭头按钮可以工作