以下是这个问题,它提供了一个解决方案,但没有解释它(不幸的是,答案中的链接现在没有了):
void method(Map<?, ?> myMap) {
Set<Map.Entry<?, ?>> set = myMap.entrySet();
...
}
incompatible types
required: java.util.Set<java.util.Map.Entry<?,?>>
found: java.util.Set<java.util.Map.Entry<capture#1 of ?,capture#2 of ?>>
void method(Map<?, ?> myMap) {
Set<? extends Map.Entry<?, ?>> set = myMap.entrySet();
...
}
WTF???在映射<?,?>
上调用EntrySet
返回一个set
,该set
不能赋值给类型为set
的变量,但可以赋值给类型为set
的变量?扩展Map.Entry
有人能说说这是怎么回事吗?这是否意味着,每当我使用至少2层深度的通配符类型编写方法时,我都必须记住将其设置为?扩展...
在什么地方?
每一个?可以独立变化,因此不能保证mymap
声明中的<?,?>
与set
声明中的<?,?>
匹配。
这意味着,一旦我有了集
,我就可以将任何类型的map
放入该集,因为map<?,?>
是所有类型的map
的超类型。但这不是set
(例如)所具有的属性--它对我可以放入的映射类型的限制要大得多。因此set
不是set
的超类型。但是mymap.entrySet()
可以很容易地成为set
,这取决于mymap
是什么。所以编译器必须禁止我们将它赋值给set
类型的变量,这就是发生的事情。
另一方面,集<?extends map<?,?>
是set
的超类型,因为map
是map<?,?>
的子类型。因此,可以将mymap.entrySet()
赋值给set<类型的变量吗?扩展映射<?,?>>
。
请注意,这里的string
和integer
没有什么特别之处,但是mymap
必须是某个东西的映射!
你可以写
<K, V> void method(Map<K, V> myMap) {
Set<Map.Entry<K, V>> set = myMap.entrySet();
...
我正在使用JPA,列类型为: 我使用PostgreSql作为我的数据库,它支持bpchar类型,现在我尝试为我的测试添加H2,但问题是,当我运行测试时,我得到以下结果: 是否有其他方法可以实现这一目标?
我有以下代码 出于某种原因,它抛出了以下编译错误 Solution.java:11:错误:不兼容类型:推断变量T具有不兼容的边界List=Arrays.asList(A);^相等约束:整数下界:int[]其中T是类型变量:T扩展方法中声明的Object asList(T...) 我假设这是一个Java8功能但我不知道如何解决这个错误
TypeScript里的类型兼容性是基于结构子类型的。 结构类型是一种只使用其成员来描述类型的方式。 它正好与名义(nominal)类型形成对比。(译者注:在基于名义类型的类型系统中,数据类型的兼容性或等价性是通过明确的声明和/或类型的名称来决定的。这与结构性类型系统不同,它是基于类型的组成结构,且不要求明确地声明。) 看下面的例子: interface Named { name: str
TypeScript里的类型兼容性基于结构子类型的。 结构类型是只一种只使用其成员来描述类型的方式。 它正好与名义类型形成对比。 看下面的例子: interface Named { name: string; }class Person { name: string; }var p: Named; // OK, because of structural typing p = ne
问题内容: 在以下代码段中: 尽管类型似乎完全匹配,但分配是错误的。 我通过将Collection的类型指定为另一个通用参数,设计出了一种肮脏的解决方法,如下所示: 但是该参数实际上是“无关”类型,只会使API复杂化,在保持类型安全的同时,有没有什么方法可以摆脱它呢? 谢谢。 问题答案: 这样做就可以了: 您仍然可以像这样使用迭代器: 作为参考,请阅读get and put原理 (最初来自Java
我按照这个教程:https://github.com/codepath/android_guides/wiki/Fragment-Navigation-Drawer 现在我在这一点上: 我的问题是这条线... 显示一个错误:不兼容的类型。需要android。应用程序。FragmentManager发现:android。支持v4.app。碎片管理器。 我看到了一些帖子,但它们不适合我。 我用AppC