<反復処理可能を作成するJava?スーパークラスが>警告なしにイテレータ<サブクラス>から延び

リコラ:

どのように適切に作成する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);
}

すべてのワイルドカードを使用する必要はありません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=190100&siteId=1