Что такое Generics в Java?
Я не совсем понимаю суть дженериков. Что они делают, как вы их используете?
Из того, что я могу сказать, все, что они делают, это проверить возвращаемые типы во время компиляции вместо времени выполнения, чтобы избежать запуска программы до появления ошибки. Это все, что они делают?
например:
public <Integer> int test() {
return 'c'; //will throw error at compile instead of runtime
}
Я читал кое-что о том, как генерики являются произвольными, и вы должны использовать только заглавные буквы? Это пугает.
Ответы
Ответ 1
Generics позволяет вам настроить метод или класс общий "для любого типа, с которым вы работаете. Например, предположим, что у вас есть метод, который объединяет два числа. Чтобы работать с самими типами, вам может потребоваться создать несколько версий этого метода. Например:
public int Add(int a, int b)
public double Add(double a, double b)
public float Add(float a, float b)
Общие возможности позволяют создать один метод, настроенный для типа, вызывающего его.
public T Add<T>(T a, T b)
T
заменяется любым типом, который вы используете.
Ответ 2
Обратитесь к Основы в FAQ Angelika Langer - это лучшее объяснение всех вещей, связанных с генериками Java, которые вы, скорее всего, найдете. Тем не менее, первоначальной основной целью дженериков было включение "типизированных" коллекций.
Ответ 3
Самый простой способ, который я могу описать, чтобы объяснить дженерики, - это хороший метаплан "copy-paste":
public <COPY> PASTE addTwoThings(PASTE a, PASTE b) {
return a + b;
}
Вы указываете тип (в разделе <COPY>
), а java использует этот тип во всем блоке кода, и он будет убедиться, что типы совместимы. Делая это таким образом, вы избегаете писать:
- addTwoIntegers
- addTwoStrings
- addTwoMyObjects
и т.д.. Не путайте это для препроцессора, хотя Java ожидает ТОЛЬКО типа, который будет предоставлен.