说我有interface
interface Rankable {}
两个类实现此接口
class Worker implements Rankable {}
class Student implements Rankable {}
现在我定义一个泛型类
class Node<T extends Rankable> {
T data;
Node left;
Node right;
Node parent;
};
实际上我不知道为什么在这里使用extend
然后我定义了class
BST
class BST<T extends Rankable> {
//field
Node root;
//method
void insert(Node node){};
};
所以,我将Student
和Worker
转换为Node
,我可以使用两种不同的节点类型(Node<Student>
Node<Worker>
)。在BST<T>
。{。}
如果回答是,为什么? extends
界面的工作原理如何?
List list = new ArrayList();
list.add(1);
list.add("hello");
//Why this code cannot work, I think it's same with code above
我是Java的新手,请耐心等待。
答案 0 :(得分:2)
您的实现不是完全通用的,所以这次您可以添加两种类型但不使用泛型。
如果您添加以下更改,则该类是完全通用的。然后回答是否你可以在T
中定义一种类型class Node<T extends Rankable> {
T data;
Node<T> left;
Node<T> right;
Node<T> parent;
};
class BST<T extends Rankable> {
//field
Node<T> root;
//method
void insert(Node<T> node){};
};
作为一个例子:
BST<Student> bst = new BST<>()
bst仅接受节点学生类型。 Node的左,右和父也只接受学生。