Ошибка компилятора возникает из-за того, что Date
реализует Comparable<Date>
, подкласс Date
может не реализовывать Comparable<SubclassOfDate>
, поэтому компилятор жалуется.
Это можно исправить, изменив A
объявление об использовании подстановочного знака:
public abstract class A<K extends Comparable<? super K>, V> extends TreeMap<K, V>
Однако вы, вероятно, намеревались объявить B
следующим образом:
public abstract class B<V> extends A<Integer,V> {
}
Integer
- это final
, никакого другого классаможет унаследовать это.Так что B
не обязательно должен быть универсальным для K
.
Что касается класса с Date
в качестве ключа, вы, вероятно, также захотите сделать это так:
public abstract class C<V> extends A<Date,V> {
}
Но поскольку Date
не является final
, вы могли бы сделать универсальный параметр K extends Date
:
public abstract class C<K extends Date, V> extends A<K,V> {
}