Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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_Generics_Collections - Fatal编程技术网

Java泛型、集合接口和对象类的问题

Java泛型、集合接口和对象类的问题,java,generics,collections,Java,Generics,Collections,我正在尝试创建一个b-tree类,该类实现如下所示的集合接口。这里的问题是add方法接收一个对象,而我的节点类setleftNode接收一个泛型类型为“T”的节点。因此,在编译时,我得到的方法不能应用于给定的类型错误: B-树类: public class BST<T> implements Collection<T>{ private Node<T> _root; private Node<T> _current; pri

我正在尝试创建一个b-tree类,该类实现如下所示的集合接口。这里的问题是add方法接收一个对象,而我的节点类setleftNode接收一个泛型类型为“T”的节点。因此,在编译时,我得到的方法不能应用于给定的类型错误:

B-树类

public class BST<T> implements Collection<T>{
    private Node<T> _root;
    private Node<T> _current;
    private Random _rnd = new Random();

    public BST(Node<T> root) {
    _root = root;
    }
    public  Node<T> getRoot(){
    return _root;
    }
@Override
public Iterator iterator() {
    throw new UnsupportedOperationException("Not supported yet.");
}


@Override
public boolean add(Object e) {
    if (this._root != null){
            if(this._root.getLeftNode() == null){
            this._root.setLeftNode(e);
            return true;
            }
        }
        return false;
}
公共类BST实现集合{
私有节点_根;
专用节点_当前;
私有随机数=新随机数();
公共BST(节点根){
_根=根;
}
公共节点getRoot(){
返回根;
}
@凌驾
公共迭代器迭代器(){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共布尔加法(对象e){
if(this.\u root!=null){
if(this.\u root.getLeftNode()==null){
这个._root.setLeftNode(e);
返回true;
}
}
返回false;
}
节点类:

    public class Node<T>{
    private T _value;
    private Node<T> _left;
    private Node<T> _right;
    public Node (T value){
    _value = value;
    }
    public T getValue(){
    return _value;
    }
    public void setLeftNode(Node<T> node){
    _left= node;
    }
    public void setRightNode(Node<T> rNode){
    _right = rNode;
    }
    public Node getRightNode(){
    return _right;
    }
    public Node getLeftNode(){
    return _left;
    }
}
公共类节点{
私人T_值;
私有节点_左;
私用节点(右),;
公共节点(T值){
_价值=价值;
}
公共T getValue(){
返回_值;
}
公共void setLeftNode(节点节点){
_左=节点;
}
公共void setRightNode(节点rNode){
_右=rNode;
}
公共节点getRightNode(){
返回权;
}
公共节点getLeftNode(){
返回左;
}
}

您希望您的BST类与类型T一起工作,因此您应该同样定义add方法

public boolean add(T e) {
...
}

BST<String> bst = new BST<String>();
bst.add(new String("Hello"))
公共布尔加法(te){
...
}
BST BST=新的BST();
bst.add(新字符串(“Hello”))
如果
BST
实现了
收集
它应该有
add(te)
。并且在
setLeftNode(新节点(e))内部

@覆盖
公共布尔加法(TE){
if(this.\u root!=null){
if(this.\u root.getLeftNode()==null){
这个.u root.setLeftNode(新节点(e));
返回true;
}
}
返回false;
}

我不完全理解这个问题,但它不应该是
公共布尔添加(元素){
?您似乎试图将
节点
添加为
集合
的元素。您可能希望
公共类BST实现集合{@Override public boolean add(节点e){…
谢谢我。我想你的建议行得通。这不是B-树,而是二叉树。它们不是一回事。我试过了,但后来发现错误,集合的add方法没有被覆盖。它在我的机器上用java6编译。你有什么java版本?我使用的是java SE 7。我将构造函数转换为:公共类BST实现了集合{}。它似乎可以工作。升级后,您能否共享
公共布尔添加(Object e)
的方法签名?根据java文档,有一个类似
添加(te)
的方法。
@Override
public boolean add(T e) {
    if (this._root != null){
        if(this._root.getLeftNode() == null) {
            this._root.setLeftNode(new Node<T>(e));
            return true;
        }
    }

    return false;
}