2012-06-05 2 views
1

Я хочу реализовать двоичное дерево поиска общего типа. Заявления являются следующим:дробное дерево поиска общего типа в java

public BTNode<T> {} 

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

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

Теперь я написал класс с именем вход и хочу сохранить экземпляры этого класса в BinarySearchTree.

public class Entry implements Comparable{ 
private String firstName, lastName, address, phoneNumber; 

public Entry(String fName, String lName, String address, String phoneNum) { 
    this.firstName = fName; 
    this.lastName = lName; 
    this.address = address; 
    this.phoneNumber = phoneNum; 
} 

public int compareTo(Object arg0) { 
    // TODO Auto-generated method stub 
    return 0; 
} 
} 

Но когда я объявляю BinarySearchTree<Entry> bst, всегда есть ошибка компиляции, говоря:

«Bound несоответствие: Тип вход не является действительной заменой ограниченного параметра> типа BinarySearchTree "

Я по-прежнему новичок в родовом типе Java. Может ли кто-нибудь помочь мне решить проблему? Благодаря

+1

'>' эта строка в интерфейсе должен быть '>' –

+1

нет, > Верно! – kutschkem

+1

@HunterMcMillen no it should not: 'extends' используется в generics, независимо от классов или интерфейсов. Если вы хотите сказать T, что 'extends Foo реализует Bar', то вы используете' ' –

ответ

6

Ваш Entry класс должен реализовать Comparable<Entry> вместо сырого Comparable, так как сырье Comparable не соответствует Comparable<T>.

public class Entry implements Comparable<Entry> { ... } 
+0

, которые имеют смысл! Спасибо большое = D – yvetterowe

5

Сделайте свой класс Вступление реализации Comparable<Entry> так, что оно соответствует договору BinaryTree.

В контракте указано "все типы T, которые расширяют (или реализуют) тип Сопоставимый < T>". Из замены «Т» с «Входа», вы видите, что это необходимо: Entry extends Comparable<Entry>

+0

, который работает! Благодаря! – yvetterowe

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