关于接口的Java通用类型

时间:2018-04-18 08:34:54

标签: java generics

说我有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){};
};

所以,我将StudentWorker转换为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的新手,请耐心等待。

1 个答案:

答案 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的左,右和父也只接受学生。