Подпись метода Java с универсальным классом возврата - PullRequest
0 голосов
/ 03 декабря 2010

В чем разница между следующими 2 сигнатурами метода:

public <T extends MyClass> Set<T> getMyList() {...}

public Set<? extends MyClass> getMyList() {...}

Ответы [ 2 ]

3 голосов
/ 03 декабря 2010

В первом случае T доступно в теле метода, а во втором - нет.Будет ли это полезно, зависит от работы метода.

1 голос
/ 03 декабря 2010

Для первого вы можете использовать его как:

Set<MyClass> set = thing.getMyList();
Set<MyDerivedClass> set = thing.getMyList();
Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();
Set<? extends MyDerivedClass> set = thing.getMyList();

Во-вторых, вы более ограничены:

Set<?> set = thing.getMyList();
Set<? extends MyClass> set = thing.getMyList();

Как вы ожидаете реализовать первое? Второе плохо, потому что заставляет код клиента использовать подстановочные знаки.

...