out
здесь не для параметра out
в обычном смысле - он выражает тот факт, что IEnumerable<T>
является ковариантным в T
. Это позволяет вам сказать, например:
IEnumerable<string> strings = new List<string>();
IEnumerable<object> objects = strings;
Java имеет дело с общей дисперсией совсем по-другому, в основном. На самом деле, дженерики в Java в целом очень разные - смотрите FAQ по дженерикам Java для лота более подробно.
Практически эквивалент IEnumerable<T>
в Java равен Iterable<T>
- вам было бы гораздо лучше использовать его, чем копировать IEnumerable<T>
по всему. (Например, Iterable<T>
имеет языковую поддержку в Java в форме «расширенного цикла for».)