Ссылаясь на: Способы помощи подстановочных знаков
В нем говорится создать вспомогательный метод для захвата wild card.
public void foo(List<?> i) {
fooHelper(i);
}
private <T> void fooHelper(List<T> l) {
l.set(0, l.get(0));
}
Простое использование этой функции, приведенной ниже, не создает ошибок компиляции и, похоже, работает одинаково. Я не понимаю, почему бы вам просто не использовать это и избегать использования помощника?
public <T> void foo(List<T> l) {
l.set(0, l.get(0));
}
Я думал, что этот вопрос действительно сводится к: какая разница между подстановочными знаками и дженериками? Итак, я пошел на это: разница между подстановочными знаками и дженериками. В нем говорится использовать параметры типа:
1) Если вы хотите применить некоторые отношения к различным типам аргументов метода, вы не можете сделать это с помощью подстановочных знаков, вы должны использовать параметры типа.
Но разве это не то, что на самом деле делает шаблон с вспомогательной функцией? Разве это не обеспечивает связь между различными типами аргументов метода с его настройкой и получением неизвестных значений?
Мой вопрос: если вам нужно определить что-то, что требует отношения к различным типам аргументов метода, то зачем использовать подстановочные знаки в первую очередь, а затем использовать для него вспомогательную функцию?
Похоже на хакерский способ включения подстановочных знаков.