T является «несвязанным» типом.Другими словами, List<T>
является сокращением для «списка вещей».
Это означает, что вы можете использовать тот же код, чтобы сделать «список людей» «списком дат» или «списком учетных записей».", вы просто предоставляете конструктор
List<Person> people = new List<Person>();
, который будет связывать T
с людьми.Теперь, когда вы получите доступ к List
, он будет гарантировать, что везде, где ранее существовал несвязанный T
, он будет действовать так, как если бы он был написан с «People» в этой позиции.Например, public T remove(int)
вернет T
, который связан с «Люди» в списке людей.Это избавляет от необходимости добавлять явные приведения.Это также гарантирует, что единственными элементами в List
являются как минимум People.
List<Person> people = new List<Person>(); // T is bound to "People"
List<Account> accounts = new List<Account>(); // T is bound to "Account"
Person first = people.remove(0);
Account firstAccount = accounts.remove(0);
// The following line fails because Java doesn't automatically cast (amongst classes)
Account other = people.remove(0);
// as people is a List<T> where T is bound to "People", people.remove(0) will return
// a T which is bound to People. In short it will return something that is at least an
// instance of People. This doesn't cast into an account (even though there are other
// lists which would).
Обратите внимание, что комментарий минимум People является индикатором того, чтосписок может содержать несколько объектов, но все объекты должны быть подклассами людей.