TL; DR: T - это параметр общего типа, который каким-то образом захлебнулся javac
T - это обычное имя, данное параметру универсального типа, который используется для системы Generics в Java *. Я не уверен, почему компилятор подавился этим, но система обобщений в целом имеет некоторые странные икоты.
* Объяснение обобщений (если вы о них не слышали)
Представьте, что вы пишете класс для хранения списка учеников. Вы хотите иметь возможность запрашивать, есть ли человек в этом списке, а также добавлять людей в этот список. На данный момент этот класс будет представлять список курсов, так что преподаватели могут гарантировать, что никто не пробирается в их классы. Вот как будет выглядеть урок:
public class StudentList {
public boolean isOnList(Student s) { ... }
public void addToList(Student s) { ... }
}
Затем представьте, что вам нужно создать новую версию этого урока для персонала в конце года, потому что только некоторые сотрудники имеют право (те, ктопрошли проверку эффективности).
public class StaffList {
public boolean isOnList(Staff s) { ... }
public void addToList(Staff s) { ... }
}
Далее кто-то просит вас создать новую версию этого класса, чтобы отслеживать ТП для курса, поскольку вы можете только передавать задания на оценку подходящим ТП. Вы бы создали еще один класс:
public class TAList {
public boolean isOnList(TA t) { ... }
public void addToList(TA t) { ... }
}
В конечном итоге вы устали от написания подобных классов, поэтому вы хотите создать один класс, который может выполнять все эти функции. Это можно сделать с помощью Generics, чтобы клиентский код мог содержать PersonList<Student>
для хранения Student
s, PersonList<Staff>
для хранения Staff
, PersonList<TA>
для хранения TA
s и любой другой типкласс, который вы хотите.
public class PersonList<T> {
public boolean isOnList(T t) { ... }
public void addToList(T t) { ... }
}
T
является здесь параметром универсального типа. При создании экземпляра класса PersonList
вы передаете ему тип в угловых скобках. Затем этот тип заменяет все экземпляры T
. Соглашение заключается в использовании однобуквенных имен, таких как T
для типа, E
для элемента, K
для ключа, V
для значения и т. Д.