我们如何在Java中扩展有界泛型类型?例如,我有一个抽象类,如下所示:
public abstract class Entry<K, V extends EntryIterable<V>> {
private Entry<K, V> next;
private Entry<K, V> previous;
private K key;
private V value;
}
让我们说我想在子类中实现一些方法。因此,当我尝试扩展此类时,我收到以下错误消息。
public class Record<K, V> extends Entry<K, V> {
public Record(K key, V value) {
super(key, value);
}
}
ERROR: Bound mismatch: The type V is not a valid substitute for the bounded parameter <V extends EntryIterable<V>> of the type Entry<K,V>
请帮忙。如果我犯了错误,请告诉我。
答案 0 :(得分:2)
在Entry
课程中,您希望V
类型扩展EntryIterable<V>
。因此,在Record
及其所有子类中,扩展Entry
时,您必须要求V
扩展EntryIterable<V>
。
据说,这将有效:
public class Record<K, V extends EntryIterable<V>> extends Entry<K, V> {
你也可以拥有更强大的类型。我的意思是,如果你的课程EntryIterableAndRemovable
延伸EntryIterable
,你可以这样做:
public class Record<K, V extends EntryIterableAndRemovable<V>> extends Entry<K, V> {
答案 1 :(得分:0)
您应该将V extends EntryIterable<V>
复制到Record
,否则编译器无法确定此限制是否始终适用于所有Entry
子类:
public class Record<K, V extends EntryIterable<V>> extends Entry<K, V> {