Noob关于泛型的问题。我试图覆盖类中的loadAll
方法CacheLoader
。它的签名是
public Map<K,V> loadAll(Iterable<? extends K> keys)
现在,当我使用loadAll(List<Integer>)
它重写时,会引发错误并建议删除@Override
注释,但是与相同loadAll(Iterable<? extends Integer>)
。有人可以告诉我区别。也不list
是可迭代的吗?
如您所见,JavaDoc List
确实实现了该接口Iterable
。
您的新签名:
public Map<K,V> loadAll(List<Integer>)
但是不会覆盖该方法:
public Map<K,V> loadAll(Iterable<? extends K> keys)
因为您将方法的调用者限制为type的参数,List
但要“覆盖”您尝试覆盖的接口的promise,则必须接受type的参数Iterable<? extends K> keys
。如果为接口提供参数类型,Iterable<? extends Integer>
那么您就是在这样做。
另一个说明这一点的示例:非工作签名将不接受,Set
而接口的原始方法将接受。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句