Вопрос в следующем: что вы хотите с ними сделать?
Как написано, единственное, что вы знаете о T
, это то, что это какой-то тип - потому что вы неНе знаю , какой тип, вы не можете делать ничего конкретного типа.Таким образом, единственные вещи, которые вы можете делать со значениями типа T
, - это вещи, которые работают для всех типов, то есть вещи, которые вы можете делать с Any?
.Это включает в себя сравнение их на равенство (или идентичность) с другими типами (или null
), преобразование их в String
s, сохранение их в коллекциях и т. П.
Для дальнейшегонужно узнать больше о типе T
.Если, например, вы знаете, что это CharSequence
(например, String
), тогда вы можете сообщить компилятору, указав привязку типа, например, <T : CharSequence>
.
Затем вы можете сделать что-нибудь сT
, что вы можете сделать с CharSequence
, например, получить его длину, перебрать или отобразить его символы и т. Д.(согласно ответу zsmb13 ).Тем не менее, компилятор не позволит вам вызывать его с помощью несвязанного класса.
Итак, с обобщениями - как и с любым другим кодом - то, что вы можете сделать с объектом, зависит от того, что вы знаете о его типе.
(Кстати, код, который вы цитируете, немного вводит в заблуждение, потому что он имеет два разных параметра типа, называемых T
: один на уровне класса, а другой в функции. Если вы имеете в виду то же самое T
в обоих случаях вы, вероятно, захотите удалить <T>
из определения функции.)