我正在用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 { }
由于类似的错误,它无法正常工作。我能用这种方法做什么?我试图将策略模式应用于遍历。我只是希望能够为任何泛型类型提供三种类型的遍历。任何提示将不胜感激。谢谢。
答案 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
将存储在二叉树中的类型,现在