В моем последнем question (спасибо вам всем, что мне ответил), я узнал разницу между List<Object>
и List<?>
.
Однако я до сих пор не вижу полезности подстановочных знаков.
У меня есть два ArrayList
s:
ArrayList<Integer> li = new ArrayList<Integer>(Arrays.asList(1,2,3));
ArrayList<String> ls = new ArrayList<String>(Arrays.asList("one","two","three"));
Теперь рассмотрим два блока кода ниже:
static void printList(ArrayList<?> list)
{
for (Object elem: list)
System.out.print(elem + " ");
System.out.println();
}
и
static <T> void printList(ArrayList<T> list)
{
for (T elem: list)
System.out.print(elem + " ");
System.out.println();
}
Когда я звоню:
printList(li);
printList(ls);
Оба метода возвращают результат:
1 2 3
one two three
Однако второе решение, в цикле for, вместо Object
, я использую параметризованные типы (гораздо более элегантные, я думаю).
Итак, главный вопрос остается: Зачем нам нужны подстановочные знаки?