考虑以下 API 方法,该方法取自 Shiro 的组织.apache.shiro.主题.Principal 收集接口,
但也可能存在于其他库中:
Collection fromRealm(String realmName);
是的,即使现在仍然有使用原始类型的库,可能是为了保持Java 1.5之前的兼容性?!
如果我现在想将此方法与流或可选选项一起使用,如下所示:
principals.fromRealm(realmName).stream().collect(Collectors.toSet());
我收到有关未选中转换和使用原始类型的警告,并且我更喜欢使用参数化类型。
日蚀:
类型安全:方法收集(收集器)属于原始类型流。对泛型类型 Stream<T> 的引用应参数化
爪哇:
注意:泛型测试.java使用未经检查或不安全的操作。
由于我无法更改API方法的签名以摆脱此警告,因此我可以注释或简单地转换为如下所示:@SuppressWarnings("unchecked")
Collection<?>
((Collection<?>) principals.fromRealm(realmName)).stream().collect(Collectors.toSet());
由于这种转换当然总是有效的,我想知道为什么编译器不是简单地对待而是警告这种情况。添加批注或强制转换不会稍微改进代码,但会降低可读性,甚至可能隐藏有关使用非参数化类型的实际有效警告。Collection
Collection<?>
莫回无
慕容森
互换的青春
繁华开满天机
相关分类