リコラ:
どのように適切に作成するIterable<? extends SuperClass>
から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);
}
しかし、私は取得未確認のキャストの警告を。このきれいな方法を実行する方法はありますか?
リコラ:
OK、私は私が探していたものを発見し、それは実際にはかなり簡単でした。
private String foo(Deque<String> words) {
Iterator<String> iterator = words.descendingIterator();
return String.join(" ", (Iterable<String>) () -> iterator);
}
すべてのワイルドカードを使用する必要はありません。