番石榴缓存覆盖错误

时间:2014-09-18 10:53:08

标签: java generics guava

Noob关于泛型的问题。 我试图覆盖loadAll类中的CacheLoader方法。 它的签名是

public Map<K,V> loadAll(Iterable<? extends K> keys)

现在,当我使用loadAll(List<Integer>)覆盖时,它会抛出错误并建议删除@Override注释,但同样适用于loadAll(Iterable<? extends Integer>)。有人可以告诉我不同​​之处。 list也不是可迭代的吗?

1 个答案:

答案 0 :(得分:2)

正如您在JavaDoc List中看到的那样,确实实现了界面Iterable

您的新签名:

public Map<K,V> loadAll(List<Integer>)

但是不会覆盖方法:

public Map<K,V> loadAll(Iterable<? extends K> keys)

因为你将你的方法的调用者限制为类型为List的参数,但是为了#34;将所有的约束限制为&#34;您尝试覆盖的界面,您必须接受Iterable<? extends K> keys类型的参数。如果您为接口提供参数类型Iterable<? extends Integer>,那么您正是这样做的。

另一个澄清这一点的例子:你的非工作签名不会接受Set而接口的原始方法会。