java - Guava 缓存覆盖错误

标签 java generics guava

关于泛型的菜鸟问题。 我试图覆盖 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/

相关文章:

java - 谷歌 Guava 嵌套木工

java - 添加滚动到文本区域

java - Hibernate 方言 + datediff 函数

java - 未知/通配符 (?) 方法调用中的通用类型

java - CacheBuilder 和 redis 一起使用

java - Guava EventBus 调度

java - XPath 表达式不起作用

Java MessageDigest 不起作用

c# - 有没有办法获取存储在通用列表中的对象的类型?

scala - 如何将 "inject"特征添加到基类型类以在具有特征的泛型类型方法中使用它们