Java无法在Map ADT接口中实现将Pair类作为其泛型参数的函数

时间:2015-04-25 07:48:10

标签: java dictionary generics interface

我创建了一个具有泛型函数entries()的地图界面。

// return iterable collection of all the key-value entries in the map
public ArrayList<Pair<KeyType, ValueType>> entries();

问题是,当我尝试实现接口时,我在entries()函数的接口文件中收到此错误:Bound mismatch: The type KeyType is not a valid substitute for the bounded parameter <KeyType extends Comparable<KeyType>> of the type Pair<KeyType,ValueType>

我对该功能的实现如下所示:

public ArrayList<Pair<KeyType, ValueType>> entries(){
    ArrayList<Pair<KeyType, ValueType>> list = new ArrayList<Pair<KeyType, ValueType>>();
    preorderList (root, list);
    return list;
}

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可能在接口声明中留下了通用绑定。由于您的Pair要求密钥可以相互比较(KeyType extends Comparable<KeyType>),因此您的Map需要在其KeyType声明中重申此约束才能使用{{1} {}为Pair。如果KeyType限制它,您可能还需要绑定ValueType

Pair

在通用类型擦除下,interface Map <KeyType extends Comparable<KeyType>, ValueType> { ... } &#39; s Pair将替换为KeyType。如果您未绑定Comparable&#39; Map,则会将其替换为KeyType,如果没有可能失败的缩小投射,则Object无法将其分配给Comparable