Я пытаюсь привести Iterator<Map.Entry<String,Option<T>>>
к Iterator<Map.Entry<String,Option<?>>>
, потому что не могу объявить универсальный T в своем коде.Я получаю следующую ошибку:
Несоответствие типов: невозможно преобразовать из Iterator
У меня есть класс OptionSet<T>
, от которого я получаю Iterator
от:
public class OptionSet<T> implements Iterable<Map<String,Option<T>>> {
private final Map<String,Option<T>> options;
// ...
public final Iterator<Map<String,Option<T>>> iterator() {
return options.entrySet().iterator();
}
}
Я использую OptionSet<?>
в своемкод, поэтому у меня нет универсального типа.
Я пытаюсь получить Iterator
из этого класса:
final Iterator<Map.Entry<String,Option<?>>> iterator = optionSet.iterator();
По какой-то причине Java не позволяет этого.Кастинг также не разрешен.Однако работает следующее:
@SuppressWarnings({ "unchecked", "rawtypes" })
final Iterator<Map.Entry<String,Option<?>>> iterator = (Iterator) optionSet.iterator();
Итак, почему это работает, но Java не разрешает обычное преобразование или приведение?