Я не буду подробно описывать дженерики, и я просто укажу существенные различия.
В первом примере, вы будете иметь возможность добавить любой тип в этом массиве, не будучи в состоянии ограничить заранее ваш массив к определенному типу и использовать время компиляции проверки, чтобы гарантировать, что массив не будет содержать посторонние типы. Не так много увидеть в этом примере.
Второй пример содержит вместо этого общую функцию, которая предоставляет все вышеперечисленные функции, проверки целостности содержимого массива будут доступны бесплатно, и если вы хотите, вы также сможете указать дополнительные характеристики этого общего типа T
, например, запрашивая, что он реализует конкретный протокол (например, ограничение duplicate()
для объекта, который реализует Comparable
или Equatable
).
Но это простой пример универсальной функции, вы также можете иметь параметризованные классы (то, что вы будете использовать больше всего), и есть много дополнительных функций.
Никогда не используйте Any
в качестве дженериков бедных, реальные дженерики являются более гибкими, добавляют полезные проверки и более четко выражают ваши намерения с минимальными дополнительными усилиями, необходимыми для их реализации.
Вскоре: первый массив может содержать 'String' ** и **' Int'. Второй массив может содержать 'String' ** или **' Int' – vadian