java - Java从 Iterator创建 Iterable没有警告
问题描述
如何正确创建Iterable<? extends SuperClass>
from Iterator<SubClass>
?
假设我有一个Iterator<String>
并且我想使用一个采用Iterable<? extends CharSequence>
. 这当然是不可能的:
private String foo(Deque<String> words) {
Iterator<String> iterator = words.descendingIterator();
return String.join(" ", () -> iterator);
}
我发现使它编译的唯一方法是
private String foo(Deque<String> words) {
Iterator<? extends CharSequence> iterator = words.descendingIterator();
return String.join(" ", () -> (Iterator<CharSequence>) iterator);
}
但我收到未经检查的演员表警告。有没有办法以干净的方式做到这一点?
解决方案
你也可以试试:
private String foo(Deque<String> words) {
return String.join(" ", (Iterable<String>) words::descendingIterator);
}
但对于一般情况,最好创建一个实用方法:
public static <T> Iterable<T> iterable(Iterable<T> iterable) {
return iterable;
}
然后像这样简单地使用它:
private static String foo(Deque<String> words) {
return String.join(" ", iterable(words::descendingIterator));
}
推荐阅读
- python - Python 文本文件处理以简化/删除 SQL 文件中的术语
- django - django-machina 搜索功能不起作用
- javascript - 是什么导致了 UI 中的角度延迟?
- webdriver - 如何将 webdriver 连接到 Android 上的 Edge 实例以运行测试脚本?
- javascript - 使用 Quokka 的 replaceAll 方法
- python - Pandas 相当于 float 或 int
- import - 在 Texthero 中导入问题
- css - Emmet 停止在 VS Code 中处理 CSS 文件
- lme4 - 线性混合模型中的异方差和序列相关性 (lmer)
- javascript - 光滑的滑块没有快速加载