Я пытаюсь создать сопоставимый узел, содержащий только сопоставимые объекты.
Из того, что я понимаю в Java, переменная-член value
должна иметь тип E
, поэтомупозже, когда я обращаюсь к нему в compareTo()
, он все равно должен иметь тип E
и не должен нуждаться в приведении, но компилятор сообщает мне, что это не так с:
incompatible types: java.lang.Comparable cannot be converted to E
.
Я думаю, что это уже должен быть тип E
.Почему я должен привести o.value
к типу E
при первом использовании, а не при втором?Чего мне не хватает?
Код ниже.
public class fakenode<E extends Comparable<E>> implements Comparable<fakenode> {
public E value;
fakenode (E value)
{
this.value = value;
}
@Override
public int compareTo(fakenode o) {
value.compareTo((E)o.value); // Why must I cast o to type E here?
o.value.compareTo(value); // This one works just fine
return -1;
}