考虑下面的API方法,它取自Shiro的org.apache.shiro.subject.PrinialCollection
接口,但也可能存在于其他库中:
Collection fromRealm(String realmName);
是的,即使是现在,仍然有库使用原始类型,可能是为了保持Java 1.5之前的兼容性?!
如果我现在想将此方法与流或选项一起使用,如下所示:
principals.fromRealm(realmName).stream().collect(Collectors.toSet());
我收到一条关于未经检查的转换和使用原始类型的警告,我更喜欢使用参数化类型。
日食:
类型安全:收集(Collector)方法属于原始类型Stream
javac:
注意:GenericsTest.java使用未检查或不安全的操作。
由于我无法更改API方法的签名来消除此警告,因此我可以使用@SuppressWarnings(“unchecked”)
进行注释,或者直接转换为集合
((Collection<?>) principals.fromRealm(realmName)).stream().collect(Collectors.toSet());
当然,这个演员阵容总是有效的,我想知道为什么编译器不简单地将
Collection
视为Collection
一个<代码>集合
请不要给我添加任何内容。我有一个严格的内容类型。。。我忘了是什么类型的。
而系列
则表示:
一切都很酷!你可以添加任何你喜欢的东西,我没有限制。
那么,为什么编译器不应该将集合
转换为集合呢
原始类型和无界通配符
List raw = new ArrayList();
raw.add("");
raw.add(1);
实际上,在无界通配符集合的情况下(
List
因为我们不知道c的元素类型代表什么,所以我们不能向它添加对象。add()方法接受集合的元素类型E类型的参数。当实际类型参数为?,它代表某种未知类型。我们传递要添加的任何参数都必须是此未知类型的子类型。因为我们不知道那是什么类型的,所以我们不能传递任何信息。唯一的例外是null,它是每种类型的成员。
原因很简单:
您可以从集合中读取
对象
s
如果在Java 5发布后,编译器将每个
集合
翻译成集合
问题内容: 请考虑以下来自Shiro 界面的API方法,但也可能存在于其他库中: 是的,即使是现在,仍然有一些库使用原始类型,可能是为了保留Java 1.5之前的兼容性? 如果我现在想将此方法与流或类似的可选项一起使用: 我收到有关未经检查的转换和使用原始类型的警告,我更喜欢使用参数化类型。 蚀: 类型安全:方法collect(Collector)属于原始类型Stream。泛型类型Stream 的
问题内容: 我正在将某些东西从Java移植到C#。在Java中,a 取决于其中的项目。在C#中,我总是从… 获取相同的哈希码。 为什么是这样? 对于我的某些对象,哈希码必须有所不同,因为其list属性中的对象使对象不相等。我希望哈希码对于对象的状态始终是唯一的,并且仅在对象相等时才等于另一个哈希码。我错了吗? 问题答案: 为了正常工作,散列码必须是不可变-一个对象的散列码必须 永远不会 改变。 如
问题内容: 在使用Guava集合并阅读其文档时,我已经阅读了几次“术语 视图” 。 我一直在寻找一种解释,说明在这种情况下视图是什么以及它是否在Guava之外使用。在这里经常使用。番石榴的这种类型在其名称中具有 视图 。 我的猜测是,一个集合的视图是另一个具有相同数据但结构不同的集合。例如,当我将条目从a添加到后者时,将是前者的视图。那是对的吗? 有人可以给我链接到一个公认的 view 定义(如果
问题内容: 给出以下作为数据类的示例: 假设我会有一个国家清单 我想将这些信息流式传输到它们的区域及其对应的名称,我想执行以下操作: 但是,该代码无法编译,因为“ getRegions”的返回值是一个Collection(列表),而不是flatMap方法接受的Stream。但是由于我知道任何Collection都可以通过其Collection.stream()方法进行流传输,所以这应该不是问题。我
问题内容: 我有一个简单的类,并且可以强制转换为集合接口(或),而不会出现任何编译器错误。请注意,该类不实现任何接口或扩展任何其他类。 当我尝试将类转换为集合时,为什么Java编译器不返回 不兼容类型错误? 没有实现。我预计会出现不兼容的类型错误,因为给定当前的类签名,所以不能是。 问题答案: 不是因为它们是集合类,而是因为它们是 接口 。没有实现它们,但是可以实现它的子类。因此,这不是编译时错误
我正在为一个类编写一个单元测试,如下所示: 现在,当我运行这段代码时,它给我一个错误,即我无法将强制转换为Java中的集合。 ps:有一个单独的类,名为,它的setter如下所示: 而我正在尝试使用上面的这种方法。