- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Guava 的 Multimap 解决泛型问题
class Foo{
...
private Multimap<Baz,? extends Bar> stuff;
...
public void overWriteStuff(Multimap<Baz,? extends Bar> newstuff){
this.stuff.clear();
this.stuff.putAll(newStuff);
}
}
这对我来说看起来非常简单,都是 stuff
和参数 newstuff
两者具有相同的类型,但我收到与泛型相关的编译器异常:
The method putAll(Multimap<? extends Baz,? extends capture#8-of ? extends Bar>) in the type
Multimap<Baz,capture#8-of ? extends Bar> is not applicable for the arguments (Multimap<Baz,capture#9-of ?
extends Bar>)
谁能看到我的泛型哪里出了问题吗?
最佳答案
问题是 ? extends Bar
表示“Bar
的某些特定(但未知)子类型”。对于类中的字段或方法的参数,您不知道多重映射保存的实际类型的值。
例如,如果您有两个类 Foo extends Bar
和Blah extends Bar
,您可以分配 Multimap<Baz, Foo>
至stuff
并通过 Multimap<Baz, Blah>
您的方法为 newstuff
。如果stuff.putAll(newstuff)
被允许,那么你就会有 stuff
作为一个多重映射,声称其所有值都是 Foo
的实例,而实际上其中一些是 Blah
的实例。 .
也许你实际上只是想要stuff
成为Multimap<Baz, Bar>
?在这种情况下,它的值可以是任何类型的 Bar
你的方法会很好用。正如 @rgettman 提到的,另一种选择是引入类型变量 T extends Bar
确保 stuff
的值和newstuff
都是 Bar
的相同子类型;您所做的取决于您实际想要完成的任务。
关于java - Guava Multimaps 通配符 putAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286573/
假设我有两个 HashMap : HashMap h1; h1.put("hi", 30); h1.put("hi2",20); h1.put("hi3",10); h1.put("hi4",20)
我正在使用 infinispan 7.2.5 版本来制作内存缓存。为了访问该缓存,我正在使用 Hotrod。所以我有在集群模式下运行的 hotrod 服务器,并且多个客户端可以使用 hotrod 客户
我得到了这个代码片段: public static void main(String[] args){ Map> map = new HashMap<>(); Set set = ne
问题 如果我显式循环遍历 HashMap A 中的每个元素并将每个元素“放入” HashMap B 中,那么我就没有问题。但是,如果由于某种原因尝试调用 A.putAll(B),B 最终会为 null
假设我有两个 HashMap : HashMap h1; h1.put("hi", 30); h1.put("hi2",20); h1.put("hi3",10); h1.put("hi4",20)
在我的代码中, SortedMap subMap; subMap = (db.getDataMap()).tailMap(previousServer)
HashMap map= new HashMap(); System.out.println(map.put(101,"john"));//null System.out.println(map.pu
我对 putAll() method 有疑问用于脚本的谷歌缓存。该方法似乎有效,但仅适用于前(~100)对 在我的脚本中,我必须缓存大量行(~2500 * 3),每一行都有不同的键,我发现缓存服务出现
文档说 ehcache 是线程安全的。据我所知,如果 thread A 更新缓存,这些更新将始终对其他线程可见。 但我想知道 putAll 操作是否是线程安全的和原子的?比如说,我想通过调用 putA
ConcurrentHashMap.putAll(Map) 方法应该是原子的吗? 我在文档中找不到它,ConcurrentMap 接口(interface)中也没有提到它,所以我猜答案是否定的。我要求
当我使用 .putAll() 时,另一个 .putAll() 会覆盖 map 的内容吗?我的 map 会包含 SomeOfMyObjects 和 SomeOfMyObjects 吗? Map blah
我有这个简单的方法,它是我的 CustomBaseAdapter 的一部分 public void setDays(Map sortedDays) { days.clea
有人知道为什么 java 的 BlockingQueue 没有 putAll 方法吗?这样的方法有问题吗?无需完全重新实现 BlockingQueue 即可解决此问题的任何好方法? 最佳答案 for
我有一个将字符映射到整数的 HashMap。为了按值对其进行排序,我编写了比较器并使用 TreeMap。但我缺少值(value)。我检查了字符串“tree”。每个循环之后的 map “字符”看起来像
使用 Guava 的 Multimap 解决泛型问题 class Foo{ ... private Multimap stuff; ... public void ov
我在使用 Map.putAll() 时遇到了一些困难。它不是更新/添加特定记录到我的主 map ,而是覆盖条目: ConcurrentMap> cache = new ConcurrentHash
我想知道在 SparseArray 类的 HashMap 类上是否有与 putAll 方法等效的方法? 我很困惑是否应该使用 append、put 或 setValueAt 以及它是否会给我相同的结果
通常(即不是并发),putAll() 不会比多次调用 put() 更有效,即使假设您排除了构建您传递给 putAll() 的另一个 Map。这是因为 putAll() 将需要迭代传递的 Map 元素,
TreeMap map1 = new TreeMap(); map1.put("A", 1); map1.put("B", 2); map1.put("C", 3); TreeMap map2 = n
我有一个 Hashmap,我在其中编写了一个处理添加和检索值的类。 class ReputationMatrix { private HashMap repMatrix; publi
我是一名优秀的程序员,十分优秀!