2015-12-12 2 views
4

Я пытался реализовать базовое двоичное дерево поиска (не относящееся к вопросу). Это то, что у меня есть:Java generics - несоответствие типов от T до T

public class BSTNode<T> { 
    public T data; 
    public BSTNode<T> left; 
    public BSTNode<T> right; 
} 


public class BinarySearchTree<T> { 
    private BSTNode<T> root; 

    public <T> BSTNode<T> insert(T item){ 
     BSTNode<T> newNode = new BSTNode<T>(); 
     newNode.data = item; 

     if(root == null){ 
      root = newNode; 
     } 

     return newNode; 
    } 
} 

Способ вставки не завершен. Но я получаю следующую ошибку компиляции: «root = newNode;» строка в блоке if:

Type mismatch: cannot convert from BSTNode<T> to BSTNode<T> 

Я не могу обернуть голову вокруг этого. Они имеют одинаковый общий тип. Зачем компилятор жалуется?

Я использую JDK 8 с Eclipse Mars.

ответ

7

Это два типа параметров с тем же именем. Один из здесь:

public class BinarySearchTree<T> 

и один отсюда:

public <T> BSTNode<T> insert 
     ^^^ 

Избавьтесь от одной стрелки, указывающие на. Вы сделали этот метод своим собственным параметром T, отличным от класса T.

+0

Да, это была проблема. Благодаря! – sreenisatish

0
public <K> BSTNode<K> insert(K item){ 

} 

и использовать K в методе вместо T

Поскольку вам нужен другой идентификатор паров в параметризированном методе, T уже используется для класса.

Смежные вопросы