Что такое Java-эквивалент шаблонов C ++? - PullRequest
21 голосов
/ 29 января 2010

Что такое Java-эквивалент шаблонов C ++?

Я знаю, что есть интерфейс под названием Шаблон. Это связано?

Ответы [ 6 ]

50 голосов
/ 29 января 2010

Шаблоны , как в 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 существует понятие стирание . Что происходит, так это то, что компилятор удаляет все ссылки на параметры универсального типа. Компилятор создает только одну скомпилированную версию кода независимо от того, сколько раз он используется с параметрами другого типа.

Другие отличия

5 голосов
/ 29 января 2010

В Java нет реальных шаблонов. Шаблоны C ++ - это объекты времени компиляции, которые используются для генерации классов. Во время выполнения их не остается.

В Java есть параметризованные типы как часть механизма, называемого обобщенными. Он служит аналогичной цели, но существенно отличается в том, как он работает, и его последствия. Он имеет некоторое представление во время выполнения, есть определенные правила и т. Д.

Начните с чтения учебного пособия по Java , затем прочитайте Эффективную Java Блоха для подробного описания предостережений, если вы хотите стать «опытным пользователем».

2 голосов
/ 29 января 2010

В Java нет шаблонов. Единственное, что сопоставимо с шаблонами, это Java Generics.

http://java.sun.com/developer/technicalArticles/J2SE/generics/

1 голос
/ 29 января 2010

Вам не нужны шаблоны в Java. Шаблоны в основном полезны, когда вам нужно иметь совершенно разные типы в качестве параметра, о котором вы ничего не знаете. В Java все объекты являются виртуальными и наследуются от одного корневого объекта, а примитивные типы определены гораздо более четко, а приведение типов работает более чувственно, поэтому в этом нет никакого смысла.

Вы можете добиться лучшей производительности с помощью шаблонов стилей C ++, но благодаря тому, что они генерируют гораздо больше кода и высокую скорость ЦП, все больше и больше опережает скорость доступа к данным, это все реже и реже, особенно когда это объекты в отличие от примитивов.

0 голосов
/ 29 января 2010

В Java нет встроенного механизма шаблонов. Вместо них есть дженерики. Кроме того, у идентификаторов есть нечто, называемое шаблонами кода, например для затмение .

0 голосов
/ 29 января 2010

В Java есть дженерики, которые похожи, но не совсем совпадают с шаблонами. Я не знаю, что такое интерфейс Template, но он не имеет ничего общего с шаблонами C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...