Что такое Java-эквивалент шаблонов С++?
Я знаю, что есть интерфейс под названием Template. Связано это?
Что такое Java-эквивалент шаблонов С++?
Я знаю, что есть интерфейс под названием Template. Связано это?
Templates, как в С++, не существует в Java. Наилучшее приближение generics.
Одно огромное различие заключается в том, что в С++ это законно:
<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
.
В С++ происходит то, что компилятор создает скомпилированную версию шаблона для всех экземпляров шаблона, используемого в коде. Таким образом, если мы имеем
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
тогда компилятор С++ скомпилирует версию sum
для int
и версию sum
для double
.
В Java существует понятие erasure. Что происходит, так это то, что компилятор удаляет все ссылки на параметры типового типа. Компилятор создает только одну скомпилированную версию кода независимо от того, сколько раз он используется с разными параметрами типа.
Другие различия
В Java нет реальных шаблонов. Шаблоны С++ - это объекты времени компиляции, которые используются для генерации классов. Во время выполнения их нет.
В Java существуют параметризованные типы как часть механизма, называемого generics. Он служит аналогичной цели, но существенно отличается в том, как он работает и его последствия. Он имеет некоторое представление во время выполнения, есть определенные правила и т.д.
Начните с чтения учебника Java, затем прочитайте Bloch Effective Java для подробного описания оговорок, если вы хотите быть "мощным пользователем" ".
В Java нет шаблонов. Единственное, что сопоставимо с шаблонами, это Java Generics.
http://java.sun.com/developer/technicalArticles/J2SE/generics/
В Java есть дженерики, которые похожи, но не точно такие же, как шаблоны. Я не знаю, что такое интерфейс Template, но он не имеет ничего общего с шаблонами С++.
В java нет механизма сборки в шаблоне. Вместо этого у них есть дженерики. Кроме того, у ides есть что-то, называемое шаблонами кода, например. для eclipse.
Вам действительно не нужны шаблоны в Java. Шаблоны в основном полезны, когда вам нужно иметь совершенно разные типы в качестве параметра, о котором вы ничего не знаете. В Java все объекты являются виртуальными и наследуются от одного корневого объекта, а примитивные типы определяются гораздо отчетливее и отбрасывают работу более чувственно, поэтому на самом деле нет смысла в этом.
Вы можете получить лучшую производительность с помощью шаблонов стиля С++, но из-за того, что они генерируют гораздо больше кода, а высокая скорость процессора все больше и больше превышает скорость доступа к данным с каждым годом, это становится все меньше и меньше, особенно когда дело доходит до объекты в отличие от примитивов.