如何参数化这个Java泛型?

时间:2014-03-16 16:34:08

标签: java generics binary-tree

我正在用Java构建一个通用的二叉树类。我之前没有过多地使用过仿制药,所以我不知道我是否正确地做了这件事。以下是我的问题后面的一些代码:

public class Node<T> {

     T data;
     Node<T> left, right;
     //assume setters and getters
}


public class BinaryTree<T extends Comparable <T>> {

       private Node<T> root;

       //assume typical setter/getter and insert, delete, etc methods

       public void inOrderTraversal() {

             //create instance of the inorder class here and call its traverse() method.
       }
}
//define a family of algorithms for preorder, inorder and postorder traversals
public interface BinaryTreeTraversal {

    public void traverse();

}
  //of course there will be a class for each type of traversal...
  //in order, pre order, post order
  class PreOrderTraversal extends BinaryTree implements BinaryTreeTraversal {

          public void traverse() { traverse(super.getRoot() ); }

          private void traverse(Node<T>) {
                   //the three lines of code this takes
          }

    }

所以我遇到的问题是我不断收到错误,说错过T型或未知类型T.所以我尝试将类改为标题

      class PreOrderTraversal extends BinaryTree<T> implements BinaryTreeTraversal { }

     class PreOrderTraversal extends BinaryTree<T extends Comparable<T>> implements BinaryTreeTraversal { }

由于类似的错误,它无法正常工作。我能用这种方法做什么?我试图将策略模式应用于遍历。我只是希望能够为任何泛型类型提供三种类型的遍历。任何提示将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

private class PreOrderTraversal< T extends Comparable< T > > extends BinaryTree< T > implements BinaryTreeTraversal { ... }

对于泛型类,参数及其所有约束都紧挨着正在定义的类的名称。不幸的是,没有为泛型方法选择该语法,其中泛型类型参数和约束在返回类型之前。

答案 1 :(得分:0)

你的班级PreOrderTraversal会实现你的通用班级BinaryTree所以你需要在这里定义T的类型

java
class PreOrderTraversal extends BinaryTree<Integer> implements BinaryTreeTraversal {

    private void traverse(Node<Integer>) {
    }

}

其中Integer将存储在二叉树中的类型,现在