Что Java эквивалентен из шаблонов C++?
Я знаю, что существует интерфейс под названием Шаблон. Это связано?
Шаблоны Как в C ++ не существует в Java. Наилучшее приближение Generics .
Одним из огромных различий в том, что в 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); }
где что-то
имеет метод под названием Add
.
В C ++, что происходит, что компилятор создает сборкущую версию шаблона для всех экземпляров шаблона, используемого в коде. Таким образом, если у нас есть
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
, то компилятор C ++ соберет версию Sum
для INT
и версия Sum
для Double
Отказ
В Java есть концепция стирания . Что происходит, состоит в том, что компилятор удаляет все ссылки на параметры общих типов. Компилятор создает только одну скомпилированную версию кода независимо от того, сколько раз он используется с различными параметрами типа.
Другие различия
Вам не нужны шаблоны в Java. Шаблоны в основном полезны, когда вам необходимо иметь совершенно разные типы в качестве параметра, о котором вы ничего не знаете. В Java все объекты являются виртуальными и наследующими из одного корневого объекта, а примитивные типы определяются гораздо более четко и отказываются от работы более чувствительными способами, поэтому на самом деле нет смысла к нему.
Вы можете получить лучшую производительность с шаблонами стилей C ++, но из-за того, как они генерируют гораздо больше кода и быстрый скорость доступа к данным процессора. объекты в отличие от примитивов.
В Java нет реальных шаблонов. Шаблоны C++ - это сущности времени компиляции, которые используются для генерации классов. Во время исполнения нет их следа.
В Java существуют параметризованные типы как часть механизма, называемого generics. Он служит схожему назначению, но существенно отличается от него по принципу работы и его последствиям. Он имеет некоторое представление во время исполнения, есть определенные правила и т.д.
Начните с чтения Java-учебника , затем прочтите Эффективную Java Блоха для подробного описания предостережений, если вы хотите быть "властным пользователем".
Java имеет дженерики, которые похожи, но не совсем совпадают с шаблонами. Я не знаю, что такое интерфейс Template, но он не имеет ничего общего с C++ шаблонами.
Там нет сборки в шаблонном механизме в Java. Вместо у них есть дженерики. Кроме того, IDes имеют что называемые шаблонами кода E.g. Для Eclipse .
В Java нет шаблонов. Единственное, что сопоставимо с шаблонами, - это дженерики Java.
http://java.sun.com/developer/technalarticles/j2se/generics/