В чем разница между следующей 2 сигнатурой методы:метод Java подпись с общими обратным классом
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
В чем разница между следующей 2 сигнатурой методы:метод Java подпись с общими обратным классом
public <T extends MyClass> Set<T> getMyList() {...}
public Set<? extends MyClass> getMyList() {...}
Для первой вы можете использовать его как:
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();
Как вы ожидали бы реализовать в первую очередь? Второй плохой, потому что он заставляет клиентский код использовать подстановочные знаки.
В первом, T
доступна в теле метода, в то время как во втором его нет. Будет ли это полезно, зависит от работы метода.
Странно, что вы должны вернуться, возвращая «список» в качестве «набора». :) – 2010-12-03 19:08:30