Шаблоны , как в C ++, не существуют в Java. Наилучшее приближение - генерики .
Одна огромная разница в том, что в C ++ это законно:
<typename T> T sum(T a, T b) { return a + b; }
В Java нет эквивалентной конструкции. Лучшее, что вы можете сказать, это
<T extends Something> T Sum(T a, T b) { return a.add(b); }
, где Something
имеет метод с именем add
.
В C ++ происходит то, что компилятор создает скомпилированную версию шаблона для всех экземпляров шаблона, используемых в коде. Таким образом, если мы имеем
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
тогда компилятор C ++ скомпилирует версию sum
для int
и версию sum
для double
.
В Java существует понятие стирание . Что происходит, так это то, что компилятор удаляет все ссылки на параметры универсального типа. Компилятор создает только одну скомпилированную версию кода независимо от того, сколько раз он используется с параметрами другого типа.
Другие отличия