如何在java中扩展有界类型

时间:2017-09-05 23:10:34

标签: java generics bounded-types

我们如何在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>

请帮忙。如果我犯了错误,请告诉我。

2 个答案:

答案 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> {