Java中的通用二进制搜索树实现-调用通用方法和强制转换异常

问题描述 投票:0回答:1

我正在尝试实现一个二叉搜索树作为分配。我们正在解决派生,继承等问题,因此该树可能包含各种不同类型的数据。

[在过去的作业中,我使用基类指针作为数据类型,并利用RTTI / upcasting / downcasting访问数据,我读到这是低效率的做法,因此,我试图摆脱它。

为此,我正在尝试实现通用的节点/树结构,但是有几个问题。首先,当涉及到从通用数据成员调用“ display”方法时,那有可能吗?由于该节点可能不知道正在存储什么类型的数据,或者该方法是否存在甚至可以被调用?

第二,当尝试将对象强制转换为我得到未经检查的强制转换异常时,有没有办法解决这个问题?还是进行检查的演员表?

任何建议或有用的解决方案,我们将不胜感激。

编辑:这是一些代码...BSTNode实现:

/**
 * Class declaration for a BST Node. Holds left and right pointers, and a data
 * member. Contains methods for getting/setting left, right, and data.
 */
public class BSTNode<T extends Comparable<T>> {

    private BSTNode<T> left, right, next; //ptr for left/right/next nodes.
    private T data; //Integer for data.

    public BSTNode(){
        left = right = next = null; //Set left/right/next ptrs to NULL.
    }

    public BSTNode(T n){
        left = right = next = null; //Sets left/right/next ptr to NULL.
        this.data = n; //Init data to passed in arg.
    }

    public BSTNode<T> getLeft() {return this.left;}

    public BSTNode<T> getRight() {return this.right;}

    public BSTNode<T> getNext() {return this.next;}

    public T getData() {return this.data;}

    public void setLeft(BSTNode<T> left) {this.left = left;}

    public void setRight(BSTNode<T> right) {this.right = right;}

    public void setNext(BSTNode<T> n) {this.next = n;}

    public void setData(T d) {this.data = d;}
}

插入:

public class Interface<T extends Comparable<T>> extends Utility {

...
        case 1:
          Subjob sub1 = new Subjob("Test");
          BSTNode<T> temp = new BSTNode<T>(sub1); //ERROR ON THIS LINE
          exit = true;
          return 1;
java generics casting binary-search-tree
1个回答
0
投票

类似界面的声音应用作BST的基础。该接口需要具有可比性(BST要求),并提供方法display()。然后取决于实现方式来正确提供该方法。

界面可能看起来像:

public interface Displayable<T> extends Comparable<T> {
    void display();
}

在BST内部,它可能具有如下节点:

public class Node<T> {
    Displayable<T> value;
    Node<T> left;
    Node<T> right;
}
© www.soinside.com 2019 - 2024. All rights reserved.