C # для переписывания Java - универсальный класс - PullRequest
3 голосов
/ 24 января 2012

Можно ли переписать этот код C # в Java?

public interface IEnumerable<out T> : IEnumerable
{

    IEnumerator<T> GetEnumerator();
}

У меня проблема с созданием универсального класса с параметром T в его имени. Я также не знаю, как решить параметр, который Java не поддерживает. Кто-нибудь, кто имеет опыт работы на обеих платформах?

Ответы [ 2 ]

8 голосов
/ 24 января 2012

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».)

0 голосов
/ 24 января 2012

Я не кодер C #, но может работать следующий код:

public interface IEnumerable<T> {
    Iterable<T> getEnumerator();
}
...