Noob关于泛型的问题。
我试图覆盖loadAll
类中的CacheLoader
方法。
它的签名是
public Map<K,V> loadAll(Iterable<? extends K> keys)
现在,当我使用loadAll(List<Integer>)
覆盖时,它会抛出错误并建议删除@Override
注释,但同样适用于loadAll(Iterable<? extends Integer>)
。有人可以告诉我不同之处。 list
也不是可迭代的吗?
答案 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
而接口的原始方法会。