Java создать Iterable & lt ;? расширяет Суперкласс > от Iterator < SubClass > без предупреждения

Цитата: «Что означает конструкция x = x || y?»

Присвоение значения по умолчанию.

Это означает, что предоставляет значение по умолчанию y для x , в случае, если x все еще ждет своего значения, но еще не получил его или был умышленно опущен, чтобы вернуться к умолчанию.

3
задан ETO 16 January 2019 в 09:19
поделиться

2 ответа

Вы также можете попробовать:

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));
}
0
ответ дан ETO 16 January 2019 в 09:19
поделиться

Хорошо, я нашел правильный путь, и это было на самом деле довольно просто:

private String foo(Deque<String> words) {
    Iterator<String> iterator = words.descendingIterator();
    return String.join(" ", (Iterable<String>) () -> iterator);
}

Нет необходимости использовать подстановочный знак вообще.

0
ответ дан Ricola 16 January 2019 в 09:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: