当我尝试使用Java 8流进行转换时,出现编译错误:
不兼容的类型
必需:
找到的列表:java.lang.Object
ArrayList list = new ArrayList();
list.add("Test");
list.add("Java");
list.add("Other");
//This won't compile
List<String> strings = list.stream()
.map(object -> Objects.toString(object, null))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
And*_*eas 10
来自评论:
我实际上是在调用返回的第三方方法
List
然后将值转换为a List<Object>或List<?> (感谢Sean Van Gorder),因此它不再是原始通用,并且流代码将起作用:
List<?> list = thirdPartyMethod();
List<String> strings = list.stream()
.map(object -> Objects.toString(object, null))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,a List和a 之间没有区别List<Object>,但编译器之间存在很大差异,因为原始泛型强制编译器中的向后兼容模式,其中所有泛型都被忽略,导致整个流链表现不佳.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |