2016-01-20 9 views
2

Я сделал класс «Люди», который имеет название строки. Теперь я хочу сравнить два объекта с помощью TreeSet.Overriding compareTo (T t)

public class People<T> implements Comparable<T> { 

    public TreeSet<People> treeSet; 
    public String name; 

    public People(String name) 
    { 
     treeSet = new TreeSet(); 
this.name = name; 
    } 

.....

@Override 
    public int compareTo(T y) { 

     if(this.name.equals(y.name)) blablabla; //Here I get error 
    } 

Ошибка:

Cannot find symbol 
symbol: variable name; 
location: variable y of type T 
where T is a type variable 
T extends Object declared in class OsobaSet 

Кто-нибудь знает, как решить эту проблему?

+1

Ничто не говорит компилятору, что тип _T_ имеет _NAME_ поле. – Berger

+0

Я знаю и не знаю, как это исправить:/ – szufi

+2

Я предполагаю, что это должно быть 'implements Comparable ', потому что это то, что вы хотите сравнить. И тогда компилятор знает, что у людей есть поле «имя» ... – Fildor

ответ

5

Общий тип в интерфейсе Comparable обозначает тип объектов, которые будут сравниваться.

Это правильное использование для примера:

public class People implements Comparable<People> 

В этом случае метод подписи будет

@Override 
public int compareTo(People y) { 
    if (this.name.equals(y.name)) { ... 
}