2016-08-18 5 views
-2

Переопределенный метод хочет вернуть Iterable<T>, но внутри метода у меня есть Iterable<String>. Как я могу вернуть Iterable<T> от Iterable<String> или даже Set<String>?Iterable <String> to Iterable <T>

Код:

@Override 
public Iterable<T> getAll() { 
    Set<String> set = getCache().keySet(); 
    Iterable<String> iter = set; 
    return ? 
} 
+6

Почему даже использовать дженерики, если это всегда строка? –

+0

Что вы хотите вернуть? Это 'keySet'? Если это так, возвращаемый тип метода должен быть 'Iterable ', но я подозреваю, что вы ожидаете вернуть что-то еще, что будет 'Iterable '. – Aaron

+0

Да, я ожидаю вернуть Iterable , но у меня есть Set . Возможно ли преобразование? – user840930

ответ

5

Простой ответ - вы не можете. Преобразование невозможно.

В декларации Iterable<T> getAll() говорит о том, что метод, как ожидается, чтобы вернуть Iterable, который поставляет экземпляры T, где T обозначает тип параметра, используемый, когда ограждающий обобщенный типа экземпляра.

Если ваш код может только возвращать Iterable<String>, тогда он будет отвечать только требованиям типа сайта вызова, если T - String. Если это приемлемо, вы можете также избавиться от параметра типового типа T.

Смежные вопросы