关于泛型的菜鸟问题。
我试图覆盖 loadAll
CacheLoader
中的方法类(class)。
它的签名是
public Map<K,V> loadAll(Iterable<? extends K> keys)
现在当我用 loadAll(List<Integer>)
覆盖时它会抛出错误并建议删除 @Override
然而注释同样适用于 loadAll(Iterable<? extends Integer>)
。有人可以告诉我其中的区别吗?不是 list
也是可迭代的吗?
最佳答案
正如您在 JavaDoc 中看到的那样List
确实实现了接口(interface)Iterable
.
您的新签名:
public Map<K,V> loadAll(List<Integer>)
但是不会覆盖该方法:
public Map<K,V> loadAll(Iterable<? extends K> keys)
因为您将方法的调用者限制为 List
类型的参数但要“履行 promise ”您尝试覆盖的接口(interface),您必须接受 Iterable<? extends K> keys
类型的参数。如果您提供参数类型 Iterable<? extends Integer>
的接口(interface)你正是这么做的。
另一个澄清这一点的例子:您的非工作签名不会接受 Set
而接口(interface)的原始方法会。
关于java - Guava 缓存覆盖错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25910704/